객체지향 디자인패턴

김멉덥·2022년 10월 9일
0

TIL

목록 보기
1/4
post-thumbnail

객체지향 디자인패턴에 대해 아래 2개의 얄코님 영상을 보고 정리한 내용

🎥 객체지향 디자인패턴 1 - 얄팍한 코딩사전
🎥 객체지향 디자인패턴 2 - 얄팍한 코딩사전

🪄 목차

  • Singleton
  • Strategy
  • State
  • Command
  • Adapter
  • Proxy
  • Facade
  • Template-method
  • Decorator
  • Factory-method
  • Abstract-factory
  • Mediator
  • Composite

✏️ 객체지향 디자인패턴 1


▶️ Singleton

Singleton 패턴이란?

  • 객체가 딱 하나만 만들어져야 할 때 사용하면 유용한 패턴

사용 예시

  • ex) 다크모드 설정

    사용자가 어떠한 페이지에서 다크모드를 설정하면 다른 모든 페이지에서도 다크모드로 나와야한다.

여기서 사용된 자바 규칙 ⭐️ (private && static)

  • 생성자 privatenew 생성 불가
    ⇒ 매번 새롭게 객체를 생성하지 못하도록 한다 !
  • static 이 붙은 클래스 / 메서드 → 정적공간, 메모리 용량이 딱 정해져있음
    static이 아닌 것들은 객체가 생성될 때마다 메모리를 차지하지만 static 으로 선언되면 객체가 얼마나 만들어지던 메모리에 지정된 공간에 하나씩만 존재하게 된다.

예시상황에 singleton 패턴 적용

  • 정적 변수와 정적 메소드 생성 (static 사용)
    정적 변수에 저장된 값을 다른 페이지에서 그대로 가져다 쓰게하여 매번 new로 다크모드를 설정해주는 객체를 생성하지 않아도 계속해서 변수 값을 불러와 일정한 설정 유지 가능

▶️ Strategy

Strategy 패턴이란?

  • 말 그대로 전략 패턴

사용 예시

  • ex) 기능 버튼 중 하나를 눌러서 모드를 설정하고 해당 모드에 대해서만 검색을 하도록 하는 기능을 구현하고자 함 ( 기능 버튼들 : 전체, 이미지, 뉴스, 지도 )

    [ 전체 | 이미지 | 뉴스 | 지도 ] [. . . 검색창 . . .] 검색 버튼 🔍

여기서 사용된 자바 규칙 ⭐️ (Interface)

  • interface == 자격증 같은 존재
  • 자격증은 자격증 스스로는 일을 하는게 아님 → 누군가가 바리스타 자격증을 따면 바리스타 일을 할 수 있게 된다.
  • 특정 interfaceimplement한 클래스는 해당 interface에서 지정한 메서드를 필수적으로 선언하여 장착한다. → 각자 해당 메소드를 가지게 되지만 각각의 메소드는 그 안에 다른 내용을 가지는 것이 가능하다.
  • 동일한 틀 안에 있는 특정 작업의 방식을 바꿔줄 때 주로 사용된다.

예시상황에 Strategy 패턴 적용

  • 전략 패턴으로 구현한다면 모드 마다의 동작 하나하나를 모듈로 따로 분리한 뒤,
  • 버튼들을 누를 때 마다 검색 버튼을 누를 때 실행될 검색 모듈을 갈아끼워주는 방식으로 코드를 짜는 것

▶️ State

State 패턴이란?

  • 특정 상태마다 다르게 할 일을 정해주는 패턴
  • 하나하나 모듈화하여 지정할 때 쓰인다.

사용 예시

  • ex) 다크모드를 껏다 켰다 하는 스위치를 구현하는 상황

    라이트 모드에서 스위치 on → 다크모드
    다크모드에서 스위치 on → 라이트모드

예시상황에 State 패턴 적용

  • Strategy 패턴은 지정된 특성 메소드가 모듈화된 모드에 따라 다르게 실행되는 것이라면
  • State 패턴은 모드도 전환되도록 하는 것과 같다

▶️ Command

Command 패턴이란?

  • Strategy 패턴은 같은 일을 하지만 알고리즘이나 방식이 갈아끼워지는 것이라면,
  • Command 패턴은 그 하는 일 자체가 다른 것이다.

사용 예시

  • 다양하게 존재한다
  • 모드 변경,
    스위치를 올리고 내릴 때 각각 다르게 짜는 것 등등
  • ex) 로봇이 할일을 순서대로 입력 -> 이를 순서대로 실행하는 학습용 프로그래밍

여기서 사용된 자바 규칙 ⭐️

  • abstract 추상 클래스
  • 본디 자식들은 상속을 하나만 할 수 있음 (부모가 여러명일 수 없다)
  • abstract 추상 클래스는 집콕하고 있는 부모, 유산의 형태만 물려준다고 이해하면 편하다.
    틀을 넘겨주기 위해서 상속을 해주는 클래스
  • 스스로 객체 생성 불가 ! new () 불가
  • 그러나 abstract 추상 클래스를 상속받은 자식 클래스들은 그 틀 안에서 자신만의 메서드 구현이 가능하다 + 추가적인 메서드도 따로 구현할 수 있다.
  • abstract 추상 클래스 속 추상 메서드는 부모가 아닌 자식 클래스에서 구현된다.

예시상황에 Command 패턴 적용

  • 상속은 하나만 가능, 인터페이스는 여러개 가능

▶️ Adapter

Adapter 패턴이란?

  • 형식이 다른 둘 사이 연결되어 호환될 수 있게 해준다.
  • 인터페이스가 서로 다른 객체들이 같은 형식아래 작동할 수 있도록 해주는 디자인 패턴

사용 예시

  • 다른 사람이 짠 코드를 내 코드에 적용시킬 때
  • 인터페이스도 다르고 메서드도 다르고 하는 알고리즘을 내 코드에 적용시키자
  • ex) 아까의 검색 기능에 동영상 검색 기능도 추가됨 (여기서 동영상 검색 기능은 다른 사람의 코드를 가져와서 적용시키고자 한다)

    [ 전체 | 이미지 | 뉴스 | 지도 | 동영상 ] [. . . 검색창 . . .] 검색 버튼 🔍

예시상황에 Adapter 패턴 적용

  • SearchFindAdapter라는 클래스를 만든다. (implements SearchStrategy)
  • 멤버 변수로 FindAlgorithm의 객체가 생성자를 통해 넣어진다.
  • 내가 search()라고 말하면 너는 find(true)로 알아들어 ~~
    → search() 가 실행되면 findAlgorithm의 find() 가 실행된다

▶️ Proxy

proxy 패턴이란?

  • 대리인 패턴
  • 회사 대표가 몸소 등장해야 하는 일은 중요도/권한이 높은 일
  • 객체를 여러개를 생성하기 부담되는 것들에 대리인인 proxy 클래스를 따로 두어서 가벼운 일을 proxy 클래스가 처리

사용 예시

  • ex) 제목이 뜨고 있지만 마우스를 위에 올리면 해당 영상의 프리뷰가 재생되는 유튜브 같은 사이트를 구현하는 상황

예시상황에 proxy 패턴 적용

  • 두개의 메서드 존재
  • 1) 제목 보여주기 → 가벼운 작업
    2) 프리뷰 보여주기 → 영상 데이터를 받아와야 한다 ( == 무거운 작업 )
  • 무거운 작업을 할 때에만 실제 클래스를 불러오도록 하여 프록시 객체로 생성된 썸네일에 커서를 올리면 실제 클래스가 호출되어 작업이 진행되도록 한다.
  • 필요할 때에만 실제 객체를 생성 (= 대표님을 불러오는)
    그러지 않을 때에는 프록시가 대신 작업하도록 한다.


✏️ 객체지향 디자인패턴 2


▶️ Facade

Facade 패턴이란?

  • Facade는 "건물의 정면"을 의미하는 단어
  • 어떤 소프트웨어의 다른 커다란 코드 부분에 대하여 간략화된 인터페이스를 제공해주는 디자인 패턴

사용 예시

  • 작업마다 여러 클래스에 접근 → 객체를 일일이 만들어서 실행하는 비효율적인 상황일 때
  • 다양한 작업이 여러 곳에서 일어나야 하는 상황일 때

예시상황에 Facade 패턴 적용

  • 여러 클래스에 접근하는 것을 하나의 메서드로 만들어 그 메서드를 돌리는 클래스를 하나 만들어서 한줄의 코드로 실행 가능
  • Facade 뒤에 숨겨두고 스위치만 누르면 작동 되는 형식처럼 동작하게 한다.

▶️ Template-method

Template-method 패턴이란?

  • 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
  • 즉, 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용하다.

사용 예시

  • 같은 형식을 지닌 특정 작업들의 세부 방식을 다양화 하고자 할 때
  • 어떤 일을 수행하는 몇가지의 여러 방법이 있는데 그 전반적 과정에 공통된 절차가 있을 때 Template-method 패턴으로 코드를 효율적으로 짤 수 있다.
  • ex) 약과를 만들 때 - 반죽 만들기, 튀기기, 시럽 바르기
    이 세가지 과정을 어떻게 하느냐에 따라 약과가 달라진다.

예시상황에 Template-method 패턴 적용

  • Template-method 패턴에서는 각각 자식 클래스에서 오버라이딩 하는 방식으로 다른 것들을 만들어 낸다.
  • 부모 클래스에서는 전체 과정 방식을 알고 있고,
    자식 클래스에서는 각 과정 내부의 세부 메서드를 오버라이딩하면서 패턴을 적용 가능하다.

▶️ Decorator

Decorator 패턴이란?

  • Decorator 패턴은 객체에 추가적인 요건을 동적으로 추가한 것
  • 여기서 동적으로 추가할 때는 보통 특정 객체를 결합하는 방식을 사용한다.

사용 예시

  • 특정 클래스에 객체가 할 수 있는 일을 여러가지 두고 각 객체마다 사용자가 원하는 대로 골라서 시키거나 기능들을 필요에 따라 장착시킬 수 있을 때 사용한다.
  • ex) 슈팅 게임 → 아이템을 먹거나 레벨업을 할 때마다 공격시 발사되는 게 추가되는 느낌

여기서 사용된 자바 규칙 ⭐️

  • @override한거에서 super(); → 상속해준 부모가 해당 메서드에서 실행하는걸 그대로 받아와서 토씨하나 안틀리고 실행하겠다. (부모가 하는걸 그대로 따라함)
  • 객체가 생성자 변수로 다른 객체 안으로 들어감 → 실행하는 메서드의 행동이 추가되도록 하는 것

예시상황에 Decorator 패턴 적용

  • 탄환 발사 → 레이저 발사 → 미사일 발사 → 플라즈마 발사
  • super(); 로 일단 부모가 하는 공격을 한 다음 ⇒ 자식이 자신의 방식으로 공격 (점점 추가되는 공격)

▶️ Factory-method

Factory-method 패턴이란?

두가지 효용이 존재

1

  • 객체를 생성하는 코드는 여러곳에 있을 수 있는데 만약 생성자가 변경되면 그걸 일일이 변경하여야 한다. → 부담이 커짐
  • 이 역할을 Factory 클래스가 대신 하면 그 메서드 내부만 변경시키면 된다.

2

  • 조건에 따라 객체를 생성해 가져오는 일을
    Factory 클래스에 위임하여 내부 클래스에 대해 알 필요가 없도록 하는 것
  • 클래스가 많고 복잡할 때 굳이 다 알 필요가 없다.
    따라서 사용할 객체의 조건들만 인자로 넘겨주면, 이에 적절한 클래스를 찾아 객체를 생성해 넘겨주는 일을 Factory 클래스가 대신 한다.
  • 협업에 있어서 다른 개발자에게 코드를 넘겨줄 때 보다 간단하게 넘겨줄 수 있다.
  • 패턴을 이해할 필요 없이 필요한 패턴만 제공받을 수 있다.

▶️ Abstract-factory

Abstract-factory 패턴이란?

  • 위에 Factory-method 패턴에 추상화가 입혀진 버전이다.
  • 여러 종류의 건설을 진행한다.
  • 테마에 따라 여러 종류가 존재한다면 테마마다 공장을 만들어 관리한다.

▶️ Mediator

Mediator 패턴이란?

  • 어떤 클래스의 객체에서 특정 이벤트가 발생할 때 마다 연결된 다른 클래스에게 알려야하는 경우가 존재한다. 그런 상황에서 사용하면 유용한 패턴.
  • 특정 이벤트에 반응하여 관련된 다른 클래스에 알려주는 중재자 역할을 한다.

▶️ Composite

Composite 패턴이란?

  • 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴이다.
  • 컴퓨터의 폴더 시스템에 비유할 수 있다.
  • 폴더 안에는 파일도 들어갈 수 있고 다른 폴더들도 폴더 안에 들어갈 수 있다.
  • 폴더와 파일은 각자 다른 파일이지만 이름 바꾸기 / 용량 구하기 / 삭제하기 등의 같은 명령어를 가진다.
    == 일괄적인 관리가 가능하다!
profile
데굴데굴

0개의 댓글