본문 바로가기
정보처리기사

[정처기실기] 16. 객체지향 설계 - 1과목 소프트웨어 구축

by 공불러 2024. 3. 26.
728x90
반응형

16. 객체지향 설계 - 1과목 소프트웨어 구축

객체지향 설계

이번 파트는 빈출 내용이 많습니다. 객체지향설계원칙(SOLID) 및 GOF 디자인 패턴 등 암기해야할 내용이 많습니다. 늘 그렇듯 지금 바로 외운다는 의지보단 천천히 읽어보다는 느낌으로 단어와 친숙해지시길 바랍니다.

목차

    객체지향설계 (OPP, Object Oriented Programming)

    현실 세계의 유형, 무형의 모든 대상을 객체로 나누고 객체의 행동과 고유한 값을 정의하여 설계하는 방법

    객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게 한다.

     

    객체 지향 구성 요소

    클래스(추상화하는 단위)

    클래스는 객체를 생성하기 위한 설계도로, 속성과 메서드로 구성됩니다.

    객체들의 공통된 특징을 정의하고, 이를 바탕으로 객체를 생성합니다.

     

    객체(클래스의 인스턴스)

    클래스의 인스턴스로, 메모리에 할당된 실체입니다.

    클래스에 정의된 속성을 가지고 있으며, 클래스에 정의된 메서드를 호출할 수 있습니다.

     

    속성(객체가 가진 고유한 성질)

    객체가 가지는 고유한 데이터를 나타냅니다. 속성은 클래스의 멤버 변수로 정의되며, 객체의 상태를 표현합니다.

    예를 들어, 자동차 클래스의 속성은 색상, 속도, 모델 등이 될 수 있습니다.

     

    메서드(행동)

    객체가 수행하는 동작을 나타냅니다. 클래스에 정의된 함수로, 특정 작업을 수행하거나 속성을 조작하는 역할을 합니다.

    예를 들어, 자동차 클래스의 메서드는 주행, 가속, 정지 등이 될 수 있습니다.

     

    메시지(인스턴스가 인스턴스에게 행위을 지시)

    객체 간에 통신하는 수단으로, 한 객체가 다른 객체에게 작업을 요청하는 것을 의미합니다.

    메시지를 통해 객체 간의 상호작용이 이루어지며, 메서드가 호출됩니다.

    객체지향 언어의 특징

    특징 설명
    캡슐화 데이터와 메서드를 하나로 묶어 외부에서 접근을 제어하는 것을 의미합니다.
    정보은닉 객체의 상세 구현 내용을 외부로부터 숨기고, 필요한 정보만을 외부에 노출하는 것을 의미합니다.
    상속 부모 클래스의 특징을 자식 클래스가 물려받아 재사용할 수 있는 기능을 의미합니다.
    다형성 같은 이름의 메서드나 연산자가 입력에 따라 다르게 작동하는 성질을 의미합니다.
    오버로딩 같은 이름의 메서드가 매개변수의 수나 타입이 다른 경우를 말합니다.
    오버라이딩 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.
    추상화 객체들이 가진 공통의 특성을 추출하여 클래스로 정의하는 것을 의미합니다.

     

    객체지향 설계 원칙(Solid)

    single, open, liskov, interface, Dependency

    원칙 암기 키워드 설명
    단일 책임 원칙 SRP (Single Responsibility Principle) 클래스는 단 하나의 책임만을 가져야 합니다. 클래스가 변경되어야 할 이유는 단 하나여야 합니다.
    개방-폐쇄 원칙 OCP (Open/Closed Principle) 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다. 새로운 기능을 추가할 수 있도록 확장 가능하고, 기존 코드를 수정하지 않아야 합니다.
    리스코프 치환 원칙 LSP (Liskov Substitution Principle) 자식 클래스는 부모 클래스의 역할을 완전히 대체할 수 있어야 합니다.
    인터페이스 분리 원칙 ISP (Interface Segregation Principle) 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다.
    의존성 역전 원칙 DIP (Dependency Inversion Principle) 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 추상화에 의존해야 합니다. 상세 구현이 아닌 추상화에 의존해야 합니다.

     

    디자인 패턴

    객체지향 프로그래밍 설계르 할때 자주 발생하는 문제들에 대해 해결방식을 정리해둔 패턴.

     

    GOF 디자인 패턴

    감마, 리차트, 랄프 존슨이 GOF(객체 지향 디자인 패턴, Gang of Four Design Patterns)라고 알려진 디자인 패턴을 만들었습니다.

    이들은 객체 지향 프로그래밍에서 자주 발생하는 문제들을 해결하기 위한 일련의 패턴을 정리하였습니다.

    여기에는 총 23가지의 디자인 패턴이 포함되어 있으며, 이들을 크게 생성 패턴, 구조 패턴, 행위 패턴으로 분류할 수 있습니다.

    생성 패턴

    객체가 생성될 떄 사용되는 패턴

    객체의 인스턴스 생성을 추상화하는 방법

    객체의 생성 과정과 클래스의 인스턴스화

     

    빈출 : singleton

    2024.02.22 - [정보처리기사] - [정보처리기사] Gof 디자인 패턴 생성패턴 암기하기 (feat. 스타크래프트)

     

    [정보처리기사] Gof 디자인 패턴 생성패턴 암기하기 (feat. 스타크래프트)

    [정보처리기사] Gof패턴 생성패턴 암기하기 (feat. 스타크래프트) Gof 디자인 패턴은 정보처리기사 실기에서 매우 빈출로 나오는 문제 중 하나입니다. 생성, 구조, 행위 중 어디에 속하는 패턴인지

    shareknowledge-top.tistory.com

     

    1. 추상 팩토리 (Abstract Factory):
      • 클라이언트가 구체적인 클래스에 의존하지 않고, 관련 객체의 집합을 생성하는 인터페이스를 제공합니다.
      • 이를 통해 관련된 객체군을 생성하고 조합할 수 있습니다.
    2. 빌더 (Builder):
      • 복잡한 객체의 생성 과정과 표현을 분리하여 객체를 생성합니다.
      • 객체의 생성 과정이 복잡할 때 유용하며, 생성자에 매개변수를 많이 전달하는 것을 피할 수 있습니다.
    3. 팩토리 메서드 (Factory Method):
      • 객체 생성을 위한 인터페이스를 정의하고, 객체의 생성을 서브클래스로 미룹니다.
      • 객체 생성을 위한 공통된 인터페이스를 제공하고, 객체의 생성을 서브클래스에 위임할 수 있습니다.
    4. 프로토타입 (Prototype):
      • 원본 객체를 복사하여 객체를 생성합니다.
      • 객체를 생성하는 복잡한 과정을 피하고, 객체를 동적으로 생성할 수 있습니다.
    5. 싱글톤 (Singleton):
      • 어플리케이션에서 인스턴스가 오직 하나임을 보장합니다.
      • 전역적으로 접근 가능한 인스턴스를 제공하고, 객체의 생성과 관련된 리소스를 효율적으로 활용할 수 있습니다.

     

    구조 패턴

    클래스나 객체를 조합하여 더 큰 구조를 만들때 사용

    빈출 : proxy, adapter

    2024.02.27 - [정보처리기사] - [정보처리기사] 구조패턴 암기하기 - 디자인 패턴

     

    [정보처리기사] 구조패턴 암기하기 - 디자인 패턴

    GoF 패턴은 시험문제에 출제하기 매우 좋은 구조입니다. UML과 암호화알고리즘과 같이 얼마나 암기했나를 물어보기 딱 좋기 때문입니다. 문장형태로는 암기하기 어렵습니다. 인간이 암기 하기 위

    shareknowledge-top.tistory.com

    1. 어댑터 (Adapter):
      • 다른 인터페이스를 변환하여 클라이언트가 해당 인터페이스를 사용할 수 있도록 합니다.
      • 기존의 인터페이스를 새로운 인터페이스에 맞게 변환하는 역할을 수행합니다.
    2. 브릿지 (Bridge):
      • 구현부와 추상층을 분리하여 서로 독립적으로 변화할 수 있도록 합니다.
      • 두 개의 별도의 계층으로 나누어 구현을 추상화함으로써, 각각의 변화에 대해 영향을 최소화합니다.
    3. 컴포지트 (Composite):
      • 객체들을 트리 구조로 구성하여 단일 객체와 복합 객체를 동일하게 취급할 수 있게 합니다.
      • 이를 통해 클라이언트는 개별 객체와 복합 객체를 구분하지 않고 사용할 수 있습니다.
    4. 데코레이터 (Decorator):
      • 객체에 추가적인 기능을 동적으로 덧붙여 확장합니다.
      • 기존의 객체를 변경하지 않고, 런타임에 새로운 기능을 추가할 수 있습니다.
    5. 퍼사드 (Facade):
      • 복잡한 서브시스템을 단순한 인터페이스로 제공하여 클라이언트가 서브시스템을 쉽게 사용할 수 있도록 합니다.
      • 복잡한 작업을 처리하는 간단한 인터페이스를 제공합니다.
    6. 플라이웨이트 (Flyweight):
      • 비용이 높은 공유 자원을 공유하여 메모리 사용량을 최적화합니다.
      • 매번 새로운 객체를 생성하는 대신, 기존 객체를 공유하여 생성 비용을 줄입니다.
    7. 프록시 (Proxy):
      • 다른 객체에 대한 대리자나 대체자 역할을 수행합니다.
      • 실제 객체에 대한 접근을 제어하거나 추가적인 기능을 제공할 수 있습니다.

    행위 패턴

    갹체나 클래스 사이의 알고리즘이나 책임분배에 관련된 패터

    빈출 : observer

    2024.02.28 - [정보처리기사] - [정보처리기사 실기] 디자인 패턴 - 행위 패턴 암기하기!

     

    [정보처리기사 실기] 디자인 패턴 - 행위 패턴 암기하기!

    [정보처리기사 실기] 디자인 패턴 - 행위 패턴 암기하기! 디자인 패턴 시리즈 그 마지막은 행위 패턴입니다. 두음만 외우는 것도 나쁘지 않지만, 시험을 내시는 분들이 어렵게 내기 위해서 구체

    shareknowledge-top.tistory.com

    패턴 특징 설명
    책임 연쇄 (Chain of Responsibility) 다음 객체로 책임 전달 처리할 수 있는 객체가 없을 때, 다음 객체로 책임을 전달하여 처리하는 방식입니다.
    커맨드 (Command) 캡슐화 요청을 캡슐화하여 요청을 하는 객체와 요청을 수행하는 객체를 분리하는 방식입니다.
    인터프리터 (Interpreter) 문법에 대한 표현 정의 주어진 언어의 문법에 대한 표현을 정의하고, 해당 표현을 해석하여 실행하는 방식입니다.
    반복자 (Iterator) 내부 구조 노출하지 않고 접근 컬렉션의 내부 구조를 노출하지 않고, 순차적으로 원소에 접근하는 방식입니다.
    중재자 (Mediator) 중재 객체들 간의 상호작용을 중재하여 결합도를 낮추고 유연성을 높이는 방식입니다.
    메멘토 (Memento) 상태 정보 저장 객체의 내부 상태를 저장하고, 나중에 복원할 수 있도록 합니다.
    옵저버 (Observer) 상태 변화 관찰 상태가 변화할 때, 등록된 관찰자들에게 자동으로 통지하여 상태 변화를 감지하는 방식입니다.
    상태 (State) 상태 객체로 표현 객체의 상태를 상태 객체로 표현하여, 상태에 따라 객체의 동작이 달라지도록 합니다.
    전략 (Strategy) 알고리즘 사용 실행 중에 알고리즘을 동적으로 교체하여 사용하는 방식입니다.
    템플릿 메소드 (Template Method) 알고리즘 골격 제공 알고리즘의 구조를 정의하고, 일부 단계를 서브클래스에서 구현할 수 있도록 합니다.
    방문자 (Visitor) 개방 폐쇄 원칙 객체 구조를 변경하지 않으면서, 여러 객체의 연산을 수행하는 방식입니다.

     

     

    728x90
    반응형

    댓글