Skip to main content

Command Palette

Search for a command to run...

2024.07.12 객체지향 디자인 패턴

Updated
3 min readView as Markdown
2024.07.12 객체지향 디자인 패턴
T

안녕하세요! Web개발을 공부하고 있는 윤종일 입니다. 현재는 Java 백엔드 개발을 깊게 파고들고 있어요! 제 궁극적인 목표는 풀스택 개발자가 되는 것입니다. 프론트엔드와 백엔드 모두를 자유롭게 넘나들며, 사용자에게 가치를 전달할 수 있는 완성도 높은 애플리케이션을 만드는 것이 목표입니다.

디자인 패턴

개념

  • 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴

  • 디자인 패턴을 참고하여 개발할 경우 개발의 효율성과 유지보수성, 운용성 등의 품질이 높아지며, 프로그램의 최적화에 도움이 된다.

디자인 패턴 구성요소

  • 이름, 문제 및 배경, 솔루션, 사례, 결과, 샘플 코드로 구성되어 있다.

디자인 패턴 유형

유형설명
생성객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
구조더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴
행위클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴

디자인 패턴 종류

생성 패턴

패턴설명
builder복잡한 인스턴스를 조립하여 만드는 구조
동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 디자인 패턴
생성과 표기를 분리해서 복잡한 객체를 생성
Prototype처음부터 일반적인 원형을 만들어 놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴, 객체의 원형을 제공하는 인스턴스에서 생성할 객체들의 타입이 결정되도록 설정하며 객체를 생성할 때 갖추어야 할 기본 형태가 있을 때 사용되는 디자인 패턴
기존 객체를 복제함으로써 객체를 생성
Factory Method상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식, 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴, 생성할 객체의 클래스를 국한하지 않고 객체를 생성
Abstract Factory구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴, 사용자에게 인터페이스를 제공하고, 구체적인 구현은 Concrete Product 클래스에서 이루어지는 특징을 갖는다, 동일한 주제의 다른 팩토리를 묶음
Singleton전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴, 한 클래스에 한 객체만 존재하도록 제한

구조 패턴

패턴설명
Bridge구현뿐 아니라 추상화된 부분까지 변경해야 하는 경우 활용, 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴
Decorator기존에 구성되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴, 상속의 대안으로 사용한다, 객체의 결합을 통해 기능을 동적으로 유연하게 확장 가능
Facade복잡한 시스템에 대하여 단순한 인터페이스를 제공함, 사용자와 시스템 간 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴, 오류에 대해서 단위별 확인 가능, 접근성을 높일 수 있음, 통합된 인터페이스 제공
Flyweight클래스의 경량화를 목적으로 하는 디자인 패턴 , 여러 개의 가상 인스턴스를 제공하여 메모리 절감
Proxy실제 객체에 대한 대리 객체로 실제 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 용량을 아낄 수 있다, 실제 객체를 드러나지 않게 하여 정보 은닉의 역할도 수행하는 디자인 패턴<br> 특정 객체로의 접근을 제어하기 위한 용도로 사용
Composite객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴<br> 복잡 객체와 단일 객체를 동일하게 취급
Adapter기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴, 상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴<br> 인터페이스가 호환되지 않는 클래스들을 함꼐 이용할 수 있도록 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움

디자인 패턴의 장단점

장점:

  • 요구사항 변경에 따른 소스 코드 변경을 최소화할 수 있게 해줌

  • 소프트웨어 코드의 품질을 향상시킬 수 있음

  • 설계 변경 요청에 대한 유연한 대처가 가능

  • 범용적인 코딩 스타일 적용 가능

  • 개발자 간의 원할한 의사소통 가능

  • 재사용을 통한 개발 시간 단축 가능

  • 소프트웨어 구조 파악이 용이

  • 객체 지향 설계 및 구현의 생산성을 높이는 데 적합

  • 소프트웨어의 품질과 생산성을 향상시킬 수 있음

단점:

  • 객체 지향 설계/구현 위주로 사용

  • 초기 투자 비용의 부담

More from this blog

서브넷 이해하기

서브넷 IPv4 IPv4로 보자면 데이터 전송 방식은 유니캐스트 멀티캐스트 브로드 캐스트다. 32bit 숫자로 구성되어 있다. 일반적으로 4개의 10진수로 표현된다. 데이터 전송 방식 데이터 전송 방식설명 유니캐스트한 대의 컴퓨터가 다른 한 대의 컴퓨터에게 데이터를 보내는 방식 멀티캐스트한 대의 컴ㅂ퓨터가 특정 그룹에 속한 여러 컴퓨터에게 ㄷ이터를 보내는 방식 브로드캐스트한 대의 컴퓨터가 같은 네트워크에 있는 모든 컴퓨터...

Aug 5, 20242 min read3
서브넷 이해하기

네트워크 계층

네트워크 계층 네트워크는 원하는 정보를 원하는 수신자 또는 기기에 정확하게 전송하기 위한 기반 인프라이다. OSI 7계층 (지겹지만 반복) OSI 7계층은 국제 표준화 기구인 ISO(International Standardization Organization)에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 개방형 시스템 상호 연결 모델이다. 각 계층은 서로 독립적으로 구성되어 있고, 각 계층은 하위 계층의 기...

Jul 29, 20243 min read3
네트워크 계층

메모리 단편화

메모리 단편화 메모리 단편화란 분할된 주기억장치에 프로세스를 할당, 반납 과정에서 사용되지 못하고 낭비되는 기억장치가 발생하는 현상이다. 유형으로는 내부 단편화와 외부 단편화가 있다. 내부 단편화 내부 단편화 개념 내부 단편화는 분할된 공간에 프로세스를 적재한 후 남은 공간이다. 내부 단편화는 고정 분할 할당 방식 또는 페이징 기법 사용 시 발생하는 메모리 단편화다. 해결 방안설명 슬랩 할당자 (Slab Allocator)페...

Jul 20, 20241 min read

2024.07.13 애플리케이션 테스트 수행

애플리케이션 테스트 수행 IDE 도구 개념 IDE(Integrated Development Environment) 도구는 코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다. 기존에는 컴파일러, 텍스트 편집기, 디버거를 따로 사용했으나 통합 개발환경을 통해 하나로 묶은 대화형 인터페이스를 제공한다. IDE 도구의 기능 IDE 도구는 다양한 기능을 통합한 형태...

Jul 12, 20242 min read2
2024.07.13 애플리케이션 테스트 수행
J

Java 백엔드 및 풀스택 개발

111 posts

안녕하세요! Web개발을 공부하고 있는 윤종일 입니다. 현재는 Java 백엔드 개발을 깊게 파고들고 있어요! 제 궁극적인 목표는 풀스택 개발자가 되는 것입니다. 프론트엔드와 백엔드 모두를 자유롭게 넘나들며, 사용자에게 가치를 전달할 수 있는 완성도 높은 애플리케이션을 만드는 것이 목표입니다.

E-Mail : ji4971@naver.com