Programer/Android (Java)

JAVA 클래스 - Part 4

아즈샤 2013. 7. 16. 23:00
반응형

벌써 JAVA 클래스 Part 4 이군요. 간단하게 정리하려고 했는데, 점점 Part가 많아지네요. 

저의 부족한 정리 능력을 계속해서 깨닫게 되는데요..


오늘은 접근제어에 대해 정리해 보도록 하겠습니다. 실제로 접근 제어는 취업 면접을 볼 때 당골 문제로 나올 정도로 중요합니다.



5. 접근 제어 


제가 예제로 쓴 소스들을 보면 데이타 타입 앞에 public이나 private라는 것을 보신 적이 있으실텐데요.

이러한 것들을 접근 지정자 (Access Identifier)라고 하며, 객체를 생성한 후에 데이터 값을 직접 할당이 가능한지 할 수 없는지를 결정합니다.


다시 말해, public 으로 선언된 데이터 타입은, 생성된 객체에 데이터 값을 직접 할당할 수 있으며,

private 으로 선언 되어 있는 데이터 타입은, 생성된 객체에 데이터 값을 직접 할당할 수 없습니다.


그럼 '직접 할당한다' 라는 뜻은 무엇일까요?

예전에 정리했던 '.' 찍어서 접근한 것을 기억하시나요? (d.plus)


점 (.) 을 사용하여 접하는 것을 '직접 할당한다' 라고 생각하면 됩니다. 즉 private로 선언된 객체는 점(.) 으로 접근이 불가능 하겠죠?


실제로 private의 객체에 (.)로 접근하면 컴파일 에러가 발생합니다.


이러한 접근 제어를 이용하는 것을 자료의 은폐화(Encapsulation) 또는 캡슐화라고 합니다.

차후, 상속을 배울 때 꼭 필요한 기본 지식이니 기억해주시기 바랍니다.




자 그럼 생각해 봅시다. 접근이 안되는 private는 혹시 쓰레기가 아닐까요? 안그래도 키워드가 너무 많아서 헷갈리는데 왜 만들었을까요?

결론은 직접 할당이 안되는 것 뿐이지 private에 접근하는 방법이 있습니다!


일단 방법부터 알려드리도록 하겠습니다.


1. private 변수에 값을 할당할 때 - public 멤버 메서드의 매개변수(Parameter)를 통해서 private 멤버에 값을 할당

2. private 변수의 값을 가져올 때 - public 멤버 메서드의 리턴(Return)을 통해서 private 멤버의 값 내보내기


다음 예제를 보도록 하죠

  1. public class TopSecret{  
  2.     private int secret; //private 멤버 변수 선언   
  3.     //private 멤버에 값 할당하기  
  4.     public void setSecret(int x){ //private에 접근하는 public 멤버 메서드   
  5.         secret = x;   
  6.     }  
  7.     //private 멤버의 값을 외부로 내보내기  
  8.     public int getSecret(){ //private에 접근하는 public 멤버 메서드  
  9.         return secret;   
  10.     }  
  11. }  

하나의 private 멤버 변수가 있고, 두개의 public 멤버 메서드가 있군요.

물론 private 로 선언된 변수는 직접접근 (.) 할 수 없습니다.

  1. TopSecret t = new TopSecret();  
  2. t.secret=1000;  

위 소스를 사용하면 컴파일 에러가 발생합니다.

그. 러. 나.

  1. TopSecret t = new TopSecret();  
  2. t.setSecret(1000);  

으읭? 이것도 (.) 연산자를 사용했으니 컴파일 에러가 나지 않냐구요? 

그렇지 않습니다. public인 setSecret 메서드를 사용했기 때문에 문제가 전혀 없습니다.


자 그럼 이제 private 변수 값을 가져오려면 어떻게 할까요? 이미 답이 위에 써있군요. (getSecret 매서드)

  1. int s = t.getSecret();  




내일 추가로 작성하겠습니다 ^^:

반응형