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
번호 분류 제목 글쓴이 날짜 조회 수
56 Java 3.4.5 결론 IT장인 2013.12.28 343
55 Java 3.4.4 변수와 메서드의 분리와 결합 IT장인 2013.12.28 446
54 Java 3.4.3 변수와 메서드 결합의 의미 II IT장인 2013.12.28 386
» Java 3.4.2 변수와 메서드 결합의 의미 I IT장인 2013.12.28 371
52 Java 3.4.1 클래스 내의 메서드 IT장인 2013.12.28 339
51 Java 3.3.7 값복사가 적용되는 곳 IT장인 2013.12.28 399
50 Java 3.3.6 값복사와 매개변수의 전달 IT장인 2013.12.28 460
49 Java 3.3.5 값복사 IT장인 2013.12.28 336
48 Java 3.3.4 리턴과 매개변수 IT장인 2013.12.28 403
47 Java 3.3.3 메서드는 변수다. IT장인 2013.12.28 329
46 Java 3.3.2 메서드 IT장인 2013.12.28 314
45 Java 3.3.1 클래스의 구성요소 IT장인 2013.12.28 381
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6