TIL240104 OOP세션 - 디자인패턴

jericho·2024년 1월 4일

TIL

목록 보기
31/62

오늘은 OOP 세션 2회차가 있었다.
1회차에서 객체지향이 무엇인지에 대해서 다루었다면 오늘은 디자인 패턴에 대한 것이었다.
여러 디자인 패턴이 있는데, 4가지에 대해서 다뤘다.

Singleton

프로그램 내에서 인스턴스가 하나만 존재해야 하고 어디에서든 인스턴스에 접근할 수 있도록 해주는 패턴.

  • 객체 생성 횟수를 줄일 수 있다.
  • 전역변수와 달리 사용하기 전까지 객체가 생성되지 않는다.
  • 멀티 스레드 환경에서 사용 시 동기화를 보장해주지 않는다.

언제 사용할까: 로그기록 객체, 유저 매니저, 데이터 테이블 정보를 저장하는 클래스(엑스트라 키값 적어두고 사용하는 등)

Strategy

  • 알고리즘을 캡슐화하여 교체하여 사용할 수 있도록 한 구조
  • 알고리즘 인터페이스를 정의하고 ...
  • ...

대략적인 설명을 들으니 업캐스팅 함수 호출이랑 비슷하다는 느낌이다.

  • 상속으로 해결할 수 없는 코드 중복이나 객체의 실시간 알고리즘의 변경 시에 유용하다
  • 신규 알고리즘 추가, 수정이 용이하다
  • OOP 디자인적인 관점에 맞지 않다

언제: 게임 룰을 모드 별로 다르게 적용하고 싶을 때 / 상황에 따라 길찾기 알고리즘을 바꾸고 싶을 때

Observer

  • 객체의 상태변화를 관찰하는 관찰자들을 객체가 가지고 있다가 상태변화가 있을 시 통지하는 패턴
  • 일대다(1:N) 의존성을 정의한다.

그냥 리스트에 넣어놓고 호출해주는거랑 비슷한거같은 느낌.

언제: GUI(셋온클릭리스너), 채팅 프로그램

Decorator

피자 토핑으로 예시.

  • 객체에 추가적인 요건을 동적으로 첨가하는 패턴
  • 기본 클래스의 서브 클래스를 구성하여 생성 시 상속받은 클래스를 넘겨서 확장할 수 있도록 함

피자 변수에 객체를 새로 집어넣는데 저게 된다고? 싶었다.
어떻게 동작하는 패턴인지 도무지 감이 안온다. 추가적으로 공부해야겠다.

언제: 인풋스트림?, 자바 I/O

이 패턴이 중요한 이유: 확장성 있게 만들 수 있다.

책 추천: 헤드퍼스트 디자인패턴

0개의 댓글