adSense 900*70


캡슐화1 JAVA - Basic

자바 공부를 하다가 보면 가장 많이 듣는 말중의 하나가 바로 캡슐화일것입니다. 그래서 오늘은 캡슐화가 무엇인지 그리고 캡슐화를 사용하면 무엇이 좋은지를 살펴보도록 하겠습니다.
일단 캡슐화의 개념은 프로그램의 정보를 다른 부분으로부터 보호하는 것입니다. 이를 좀 더 자세히 알기 위해선 접근 변경자에 대해 알아야 합니다. 자바에선 아래와 같이 네개의 접근 변경자가 있습니다.
1. public: 변수나 메서드 혹은 클래스를 public으로 선언하게 되면 클래스 외부에서 public으로 선언된 데이터 혹은 메서드에 아무런 제한 없이 접근하여 데이터를 변경하거나 메서드를 호출할 수 있게 됩니다.  
데이터 혹은 변수를 public으로 선언한 경우 데이터에 대한 범위, 혹은 validation을 체크하기가 힘들죠. 객체를 선언하고 데이터에 바로 접근하여 변경해버리게 되면 데이터를 변경하고자 하는 객체쪽에서 범위를 제한하거나 데이터 값이 합당한 값인지를 검증하는 코드를 넣어야하는데 이는 그리 좋지 않은 방법이죠. 왜냐면 실질적으로 해당 데이터의 소유하고 있는 객체가 아닌 다른 객체가 임의적으로 합당하지 않은 값을 넣어버릴 수도 있고, 또 데이터를 변경하고자 하는 객체마다 해당 코드를 매번 넣어줘야 하기 때문이죠.

2. private: 이 접근 변경자로 선언된 변수 혹은 메서드를 외부에서 호출 하는 것을 금지하겠다는 것입니다. 만약 private로 선언된 변수나 메서드를 호출할려고 하면 컴파일시에 에러가 납니다.
아래와 같은 코드가 있다고 하면 AccessModifierTest는 컴파일시에 아무런 문제가 없습니다. 하지만 AccessModifierTestDrive를 컴파일 하게 될경우  test has private access in AccessModifierTest, setTest(int) has private access in AccessModifierTest라는 에러를 만나게 될것이라는 거죠. 왜냐면 test변수와 setTest변수는 private로 선언이 되어있어서 외부 객체에선 접근을 할 수 가 없기때문입니다. 하지만 test, setTest를 public으로 바꿔주면 에러는 없지만 그리 좋은 코드는 아니라는 것입니다. 그 이유는 위에서 이미 설명을 했죠. 
public class AccessModifierTest{
  private int test;
  
  public AccessModifierTest(){
  }
  
  private void setTest(int test){
    this.test = test;
  }
}

public class AccessModifierTestDrive{
  public static void main(String[] ar){
    AccessModifierTest a = new AccessModifierTest();
    a.test = 0;
    a.setTest(1);
  }
}


3. protected: 이 접근 변경자는 상속시에 그리고 같은 패키지 안에서만 사용 가능하다라는 것을 의미합니다.
4. default: default라고 해서 default를 직접 써주는 것이 아니라, 어떤 접근 변경자도 써주지 않을 경우 default로 선언이 되는 것이구요. default접근 변경자로 선언하게 되면 같은 패키지 안에서만 접근이 가능하다라는 의미입니다.

캡슐화를 간단히 설명을 하면 정말 간단하게 설명을 할 수 있지만 그렇지 않습니다. 캡슐화는 객체지향 프로그래밍 개념중의 하나이며 굉장히 중요한 것이기 때문에 꼼꼼히 공부를 하여야 할것이라는 것이죠. 

오늘은 일단 여기까지만...
다음엔 캡슐화의 장점
1. 코드 변경의 최소화
2. 중복된 코드를 제거



덧글

댓글 입력 영역


side adsense

adSense 900*70