Programer/Android (Java)

JAVA 클래스 - Part 3

아즈샤 2013. 6. 25. 17:52
반응형

저번 시간에 이어서 JAVA에서는 왜 매서드를 이용해서 클래스를 만드는지 그 이유를 정리해보도록 하겠습니다.


4. 변수와 메서드의 분리와 결합


다음 예제는 SeparaedData 클래스의 예제 입니다.

  1. public class SeparatedData {  
  2.     public int plus(int x, int y) {//멤버 메서드   
  3.         return x + y;  
  4.     }  
  5.     public int minus(int x, int y){//멤버 메서드   
  6.         return x - y;  
  7.     }  
  8.     public int divide(int x, int y){//멤버 메서드   
  9.         return x / y;  
  10.     }  
  11.     public int mul(int x, int y){//멤버 메서드   
  12.         return x * y;  
  13.     }  
  14. }   

클래스 안에 간단한 매서드 4개가 있군요.


두개의 매개변수를 받아 사칙연산 후 결과 값을 리턴하는 매서드입니다.


이 클래스의 객체를 만들어 매소드를 사용해보겠습니다.

  1. public class SeparatedDataMain{  
  2.     public static void main(String[] args){  
  3.         SeparatedData d = new SeparatedData();//SeparatedData 객체 생성   
  4.         System.out.println(d.minus(5,10)); //minus() 메서드 호출 후 결과 출력   
  5.         System.out.println(d.plus(5,10)); //plus() 메서드 호출 후 결과 출력   
  6.         System.out.println(d.divide(5,10)); //divide() 메서드 호출 후 결과 출력   
  7.         System.out.println(d.mul(5,10)); //mul() 메서드 호출 후 결과 출력   
  8.     }   
  9. }   

자 예제를 보면 Main 클래스가 있습니다. 

(JAVA에서 Main클래스는 C언어의 Main함수 처럼 프로그램이 실행 될 때 최초로 시작되는 부분입니다.)

그리고 3번째 줄에서는 SeparatedData  클래스를 선언해주고, 메모리 할당을 해주고 있군요. 즉, 객체를 생성하고 있습니다.


4번째 줄부터 매서드를 실행하고 있는데, 매개변수를 직접 입력하여 매서드를 호출하고 있습니다.


지금까지의 프로그램 기법은 C언어에서 사용하던 함수 라이브러리와 별 차이가 없습니다.




다음 UnitedData 클래스와 비교해 볼까요?

  1. public class UnitedData {  
  2.     public int x;   //멤버 변수의 선언   
  3.     public int y;   //멤버 변수의 선언   
  4.     public int plus() {//멤버 메서드의 선언   
  5.         return x + y;  
  6.     }  
  7.     public int minus(){//멤버 메서드의 선언   
  8.         return x - y;  
  9.     }  
  10.     public int divide(){//멤버 메서드의 선언   
  11.         return x / y;  
  12.     }  
  13.     public int mul(){//멤버 메서드의 선언   
  14.         return x * y;  
  15.     }  
  16. }   

Separaed Data 클래스에서 x, y 라는 멤버 변수가 추가 되었습니다.


자, 클래스를 만들었으니 사용해 봐야죠.

  1. public class UnitedDataMain{  
  2.     public static void main(String[] args){  
  3.         UnitedData d = new UnitedData(); //UnitedData 객체 생성   
  4.         d.x = 5; //멤버 변수에 값할당   
  5.         d.y = 10; //멤버 변수에 값할당   
  6.    
  7.         System.out.println(d.minus()); //멤버변수를 이용한 minus() 메서드 호출   
  8.         System.out.println(d.plus()); //멤버변수를 이용한 plus() 메서드 호출   
  9.         System.out.println(d.divide()); //멤버변수를 이용한 divide() 메서드 호출   
  10.         System.out.println(d.mul()); //멤버변수를 이용한 mul() 메서드 호출   
  11.     }   
  12. }  

음.. 방금 전에 사용 했던 Separaed Data 클래스와 무언가가 다르네요?


a. 4번째와 5번째 줄을 보면 생성된 객체의 맴버 변수에 할당하는 것을 알 수 있습니다.

b. 메서드를 호출할 때 매개변수를 넘겨주는 것이 아니라 이미 내부의 메모리 (내부 변수) 에 할당된 값을 이용해서 메서드를 호출하고 있습니다.




정리를 해 보겠습니다.


SeparaedData 클래스 사용한 예제를 보면 순차적인 프로그래밍과 동일하다고 볼 수 있습니다.

하지만 SeparaedData 클래스와 같이 데이터와 메서드가 분리 되어 있을 때 문제점이 있습니다.


- SeparaedData 클래스를 사용할 때 문제점

a. 메서드를 호출할 때마다 데이터를 매개변수로 넘겨주어야 한다.

b. 특정 데이터를 사용하는 메서드가 몇개인지 알 수 없다.

c. 특정 데이터를 사용하는 메서드를 묶어서 관리 할 수 없다.


이것을 극복하기 위해 변수 + 메서드 조합인 UnitedData를 사용하는 것입니다.

한번만 멤버 변수에 값을 할당하면 변수 변경이 필요 없을 때까지 매개변수를 사용할 필요가 없고, 

클래스로 안에 멤버 변수를 선언하기 때문에 어느 메서도에서 또는 몇개의 매서드에서 사용하는지 알 수 있습니다.


이해가 되실지 굉장히 걱정되는 데요..

설명하는 능력이 떨어진다는 것을 다시한번 느껴지네요...


다음에는 저번에 생략했던 접근 제어에 대해 정리해 보도록 하겠습니다.



반응형

'Programer > Android (Java)' 카테고리의 다른 글

JAVA 클래스 - Part 4  (0) 2013.07.16
JAVA 소켓으로 웹페이지 정보 가져오기  (0) 2013.07.03
JAVA 클래스 - Part 2  (0) 2013.06.24
JAVA 클래스 - Part 1  (0) 2013.06.18
JAVA 데이터 타입  (0) 2013.06.13