Contents

조회 수 371 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


3.4.2 변수와 메서드 결합의 의미 I

클래스에 메서드가 추가되는 예를 알아보았다. 어떻게 클래스 내에 메서드가 들어가는지 알았을 것이다. 그렇다면 왜라는 질문을 던져 보자. 왜 변수들의 집합인 구조체에 메서드를 추가했을까?

너무나도 간단한 질문일 수도 있으며 너무나도 복잡한 질문일 수도 있다. 메모리적인 측면과 방법론적인 측면을 고려해서 생각해보자.

□ 질문
◇ 왜 변수들의 집합인 구조체에 메서드를 추가했을까?

이것의 차이를 알아보기 위해서 메서드만으로 이루어진 클래스와 메서드와 변수가 결합된 클래스를 테스트해보자. 테스트할 클래스는 다음과 같다.

□ 테스트할 클래스
◇ 메서드로만 이루어진 클래스(SeparatedData 클래스)
◇ 메서드와 변수가 결합된 클래스(UnitedData 클래스)

□ SeparatedData 클래스의 특징
◇ 메서드로만 이루어진 클래스는 메서드를 호출할 때마다 필요한 데이터를 넣어 주어야 한다.

먼저 메서드로만 이루어진 클래스부터 학습해보자.

§chap03\SeparatedData.java
 
/**
메서드로만 이루어진 클래스
**/
public class SeparatedData {
    public int plus(int x, int y) {//멤버메서드 
        return x + y;
    }
    public int minus(int x, int y){//멤버메서드 
        return x - y;
    }
    public int divide(int x, int y){//멤버메서드 
        return x / y;
    }
    public int mul(int x, int y){//멤버메서드 
        return x * y;
    }
/***
c:\javasrc\chap03>javac SeparatedData.java
***/

SeparatedData라는 클래스는 단순한 메서드의 집합이다. 클래스 내부에 데이터(멤버 변수)는 존재하지 않는다. 다음과 같이 객체를 생성한 후 메서드를 호출하기 위해서는 매개변수를 넣어준 후 메서드를 호출해야 한다. 즉 메서드를 호출할 때마다 데이터를 매개변수로 넣어 주어야 한다.

▒ SeparatedData 객체의 생성과 메서드의 호출
 
SeparatedData d = new SeparatedData();
int a = d.minus(5,10);
int b = d.plus(5,10);
int c = d.divide(5,10);
int d = d.mul(5,10);

이것을 테스트하는 예는 다음과 같다.

§chap03\SeparatedDataMain.java
 
/**
SeparatedData를 테스트하는 클래스
**/
public class SeparatedDataMain{
    public static void main(String[] args){
        SeparatedData d = new SeparatedData();//SeparatedData 객체 생성 
        System.out.println(d.minus(5,10)); //minus() 메서드 호출 후 결과 출력 
        System.out.println(d.plus(5,10)); //plus() 메서드 호출 후 결과 출력 
        System.out.println(d.divide(5,10)); //divide() 메서드 호출 후 결과 출력 
        System.out.println(d.mul(5,10)); //mul() 메서드 호출 후 결과 출력 
    
/***
c:\javasrc\chap03>javac SeparatedDataMain.java
c:\javasrc\chap03>java SeparatedDataMain
-5
15
0
50
***/

이러한 프로그램 기법은 C 언어 계열에서 사용하던 프로그램 기법이다. 객체지향이 없던 시절 아주 일반화된 프로그래밍 기법이다. C 언어의 라이브러리는 함수들의 집합으로 이루어져 있으며, 필요할 때 함수를 코드에 포함시켜 사용하였다. 즉 함수 형태의 라이브러리였다. 필요한 데이터는 함수를 호출할 때마다 매개변수를 통해서 넣어 주고 호출하였다.

이러한 측면에서 본다면 메서드로만 이루어진 클래스는 C 언어의 함수 라이브러리와 별 차이가 없다. 그럼, 데이터와 메서드가 결합된 형태를 보고 그 차이점을 알아보자.

☞ 참고
main()이 클래스 내부에 들어 있는 것은 자바에서는 아주 당연한 것이다. C나 C++ 언어에 익숙한 분들은 '왜 main() 메서드가 클래스 안에 있지?'라고 생각할 수도 있다. C나 C++에서는 메서드가 독립적으로 존재할 수 있지만, 그리고 main()은 독립된 함수로 존재해야 되지만, 자바에서는 무조건적으로 클래스 내에 넣어야 한다. 자바에서 클래스 외부에 존재하는 변수나 메서드는 아예 존재하지도 않는다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
68 Java 3.6.7 결론 IT장인 2013.12.28 1137
67 Java 3.6.6 MotorCycle m = new MotorCycle() IT장인 2013.12.28 1727
66 Java 3.6.5 참조 변수의 타입 IT장인 2013.12.28 1223
65 Java 3.6.4 참조 변수끼리의 할당 IT장인 2013.12.28 1302
64 Java 3.6.3 참조 변수의 특징 IT장인 2013.12.28 1832
63 Java 3.6.2 참조값의 원리 IT장인 2013.12.28 1415
62 Java 3.6.1 객체의 메모리 생성 IT장인 2013.12.28 536
61 Java 3.5.5 private 멤버 필드를 사용하는 이유 IT장인 2013.12.28 2551
60 Java 3.5.4 private의 사용 이유 IT장인 2013.12.28 526
59 Java 3.5.3 private에 접근하는 방법 IT장인 2013.12.28 5125
58 Java 3.5.2 private의 접근과 컴파일 에러 IT장인 2013.12.28 1377
57 Java 3.5.1 접근제어란? IT장인 2013.12.28 728
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6