아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.

 

📃 참고자료

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해

COUPANG

www.coupang.com

 

 

 

# 캡슐화(Encapsulation)란?

  • 데이터 + 관련 기능 묶기
  • 연관된 "상태"와 "행위"를 결정하는 기능을 묶어 주는 것을 의미합니다.
    => 이렇게 묶어 주면 기능을 클래스 밖에서 접근 가능한 대상을 제한하는 정보 은닉이 가능하다.
    => 하나의 객체를 위한 코드가, 다른 객체를 위한 코드와 무관하게 수행할 수 있는 모듈화(modularity)가 가능해진다.
  • 객체가 기능을 어떻게 구현했는지 외부에 감추는 것
    -> 구현에 사용된 데이터의 상세 내용을 외부에 감춘다.
public class Common {
	private int state;  // private로 선언함으로써 정보 은닉
    public void setState(int newState) { // 상태를 변경 가능
    }
}

 

 

 캡슐화를 하는 이유

  • 외부에 영향 없이 객체 내부 구현 변경 가능
  • 요구사항의 변화가 발생 했을 때, 연쇄적으로 변경이 전파 되는 걸 최소화 할 수 있다.
    -> 캡슐화된 기능을 사용하는 코드에 변경에 따른 영향을 최소화 할 수 있는 이점
    -> 캡슐화를 사용하는 가장 큰 이유
  • 캡슐화 시도는 기능에 대한 (의도) 이해를 높임
    * 작성된 코드의 의도를 파악해야 캡슐화를 할 수 있다.

 

 

# 캡슐화를 위한 규칙

 

  • Tell, Don't Ask
    -> 데이터 달라 하지 말고 해달라고 하기

 

왼쪽 코드처럼 acc.getMembership()으로 데이터를 가져와 해당 데이터가 REGULAR인지 확인 하는 것이 아닌,

오른쪽 코드처럼 확인(판단)을 해달라고 지시 하는 것이다. 

 

 

Demeter's Law

  • 메서드에서 생성한 객체의 메서드만 호출
  • 파라미터로 받은 객체의 메서드만 호출
  • 필드로 참조하는 객체의 메서드만 호출

 

오른쪽 코드처럼 acc에 특정 메서드만 호출하는 방식을 사용하는 법칙이다.

* 메서드 하나만 호출하는 방식

 

좀 더 간결하고 기능과 의도 파악이 쉬워진다.

반응형

+ Recent posts