반응형
객체 지향 프로그래밍(OOP)에서 캡슐화를 왜 쓸가?
캡슐화를 쓰는 이유는 여러가지가 있겠지만 내가 생각하는건 2가지
첫째로 변수를 보호하기 위해서
둘째로 변수를 숨기기 위해서
간단한 예를 보자
private int total;
public void add(int num){
total += num;
}
public void delete(int num){
total -= num;
}
public int getToal(){
return total;
}
여기서 변수 total에 대한 접근 제한자가 private 이다.
즉, 외부에서 total 변수에 직접 접근할 수 있는 기능은 없다.
그럼 ? 어떡해 해야 할까?
우리는 3개의 method를 만들었다.
저 method들을 통해서 접근해야 한다.
그럼 method들을 통해서 접근하는 방법은 무슨 장점이 있느냐?
API의 명료성을 이용하여 기능을 사용할 수 있다.
total += 라고 쓰면 뭐 안 좋냐? 라고 생각할 지 모르지만 위와 같이 간단한 연산이 아니고
total을 이용해서 값을 만들어야 할 경우는 method를 활용하여 계산하는 것이 훨씬 간단하다.
주제에 좀 벗어난거 같군^^;;
어쨌든 사용자가 total이라는 변수를 몰라도 클래스 객체의 method들을 사용하여 total이라는 값을 접근 할 수 있게 하고
외부에서 변수에 직접 접근하여 값을 변경 할 수 없도록 하는 것이 캡슐화의 요다
캡슐화를 쓰는 이유는 여러가지가 있겠지만 내가 생각하는건 2가지
첫째로 변수를 보호하기 위해서
둘째로 변수를 숨기기 위해서
간단한 예를 보자
private int total;
public void add(int num){
total += num;
}
public void delete(int num){
total -= num;
}
public int getToal(){
return total;
}
여기서 변수 total에 대한 접근 제한자가 private 이다.
즉, 외부에서 total 변수에 직접 접근할 수 있는 기능은 없다.
그럼 ? 어떡해 해야 할까?
우리는 3개의 method를 만들었다.
저 method들을 통해서 접근해야 한다.
그럼 method들을 통해서 접근하는 방법은 무슨 장점이 있느냐?
API의 명료성을 이용하여 기능을 사용할 수 있다.
total += 라고 쓰면 뭐 안 좋냐? 라고 생각할 지 모르지만 위와 같이 간단한 연산이 아니고
total을 이용해서 값을 만들어야 할 경우는 method를 활용하여 계산하는 것이 훨씬 간단하다.
주제에 좀 벗어난거 같군^^;;
어쨌든 사용자가 total이라는 변수를 몰라도 클래스 객체의 method들을 사용하여 total이라는 값을 접근 할 수 있게 하고
외부에서 변수에 직접 접근하여 값을 변경 할 수 없도록 하는 것이 캡슐화의 요다
마지막으로 가운데에 변수가 있고 구변에 함수들이 존재하는 알과 같은 구를 상상하면 된다. ㅋㅋ