Ch.3 클래스 설계: 모든 것과 연결되는 설계 기반

텐저린티·2023년 7월 13일
0
post-thumbnail
  • OOP = 클래스 기반 프로그래밍
  • 클래스 기반
    • 클래스 = 데이터 + 데이터 조작 논리
    • 프로그램 = 클래스 + 클래스
  • 클래스 설계가 잘 되면 유지보수, 변경이 쉬운 코드 작성 가능
💡 클래스 설계란, 인스턴스 변수가 잘못된 상태에 빠지지 않게 하기 위한 구조 만드는 방법

클래스 단위로 잘 동작하도록 설계하기

클래스 단위로도 잘 동작하게 설계해야 한다

  • 초기설정을 따로 하지 않아도 곧바로 사용할 수 있도록 만들어야 함
    • 생성자
  • 데이터와 로직이 한 군데 모여있도록 구현
    • 응집도
  • 최소한의 메소드만 외부에 제공
    • 캡슐화

클래스 구성요소

  • 인스턴스 변수
  • 인스턴스 변수를 정상적으로 조작하는 메소드

자기방어 임무

  • 클래스 스스로 자기방어 임무 할당

성숙한 클래스로 성장시키는 설계 기법

생성자 사용하기

  • 로우 데이터 객체
    • 초기화되지 않은 상태 유발 클래스
    • 쓰레기 객체
  • 해법
    • 생성자에 초기화 로직 작성
    • 생성자에 유효성 검사 작성 (가드)
  • 효과
    • 잘못된 값을 가진 인스턴스 생성 X

계산로직 데이터와 함께 묶기

  • 응집도를 높이는 방법
  • 클래스 = 데이터 + 데이터 조작 로직

불변변수로 예상 못한 동작 막기

  • 예상치 못한 부수 효과 방지 방법
  • 인스턴스 변수를 final로 immutable하게 변경
  • 의미 없거나 잘못된 값 할당 불가

새로운 인스턴스로 값 변경

  • 인스턴스 변수가 final이라면 값 변경 불가
  • 인스턴스 변수 값 변경을 원하면, 새로운 인스턴스를 생성해서 사용
Money add(Money money) {
		int added = amount + money.amount;
		return new Money(added);
}

매개변수, 지역변수 final

  • 매개변수, 지역변수는 최대한 변경하지 않는 것이 좋음
  • final로 값 할당을 방지하는 것도 좋은 방법

엉뚱한 값 전달 방지

  • 기본 자료형이 아니라, 값 객체를 만들어 매개변수로 전달
  • 같은 자료형이지만, 의미가 다른 값이 전달되는 현상 방지
  • 다른 자료형이 매개변수로 주어지면 컴파일 에러

무의미한 메소드 추가 지양

  • 꼭 필요한 메소드만 구현해서 사용
  • 다른 사람이 모르고 쓸 수 있다는 생각

악마 퇴치 효과 검토하기

  • 중복코드 ← 생성자 초기화
  • 수정누락 ← 데이터 + 로직 묶기
  • 가독성저하 ← 데이터 + 로직 묶기
  • 쓰레기 객체 ← 생성자 초기화
  • 잘못된 값 ← final 인스턴스 변수
  • 부수효과 ← final 인스턴스 변수, 매개변수, 지역변수
  • 값 전달 실수 ← 값 객체 자료형 매개변수

프로그램 구조의 문제 해결에 도움을 주는 디자인 패턴

  • 디자인 패턴
    • 응집도 높게
    • 잘못된 상태 없게

완전 생성자

  • 클래스 (인스턴스 변수)가 잘못된 상태를 갖지 않도록 보호하는 패턴
  • 생성자에서 모든 인스턴스 변수를 초기화하는 방법
  • 가드와 함께 사용하면 금상첨화

값 객체

  • 값을 클래스(자료형)으로 나타내는 패턴
  • 값과 로직의 응집도 증가
  • 잘못된 값 방지
  • 완전 생성자와 함께 쓰면 좋다좋아
profile
개발하고 말테야

0개의 댓글

관련 채용 정보