Java

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

by IT장인 posted Dec 28, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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


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()은 독립된 함수로 존재해야 되지만, 자바에서는 무조건적으로 클래스 내에 넣어야 한다. 자바에서 클래스 외부에 존재하는 변수나 메서드는 아예 존재하지도 않는다.