- 객체지향(OOP, Object Oriented Programming) (★)
- 개념
- 현실 세계의 유형, 무형의 모든 대상을 객체(Obejct)로 나누고, 객체의 행동(Method)과 고유한 값(Attribute)을 정의하여 설계하는 방법
- 객체지향 구성요소 (★)
- 클래스(Class)
- 유사한 종류의 유형/ 무형의 존재를 속성과 연산을 정의해서 만든 틀
- 다른 클래스와 독립적으로 디자인한다.
- 데이터를 추상화하는 단위
- 객체(Object)
- 클래스의 인스턴스
- 객체는 자신 고유의 속성을 가지며, 클래스에서 정의한 연산을 수행
- 객체의 연산은 클래스에 정의된 연산을 공유함으로써 메모리를 경제적으로 사용
- 속성(Attribute)
- 객체들이 가지고 있는 고유한 데이터를 단위별로 정의한 것
- 성질, 분류, 수량, 현재 상태 등에 대해 표현한 값
- 메서드(Method)
- 특정한 작업을 수행하기 위한 명령문의 집합
- 객체가 가지고 있는 속성들을 변경할 수 있는 하나의 연산
- 메시지(Message)
- 객체에게 어떤 행위를 하도록 지시
- 객체의 메서드를 호출함으로써 객체 간의 상호작용을 할 수 있도록 한다.
- 객체지향언어의 특징 (★)
- 캡슐화(Encapsulation)
- 데이터(Attribute)와 데이터를 처리하는 행동(Method)을 하나로 묶은 것
- 캡슐화된 객체의 세부내용은 외부에 은폐(정보은닉)되어 오류의 파급 효과가 적다.
- 캡슐화된 객체들은 재사용이 용이
- 객체들 간의 메시지를 주고받을 때, 해당 객체의 세부 내용을 알 필요가 없으므로 인터페이스가 단순해지고, 결합도가 낮아진다.
- 정보은닉(Information Hiding)
- 캡슐화의 가장 중요한 개념
- 다른 객체에게 자신의 데이터를 숨기고, 자신이 정의한 행동만을 통하여 접근을 허용
- 상속(Inheritance)
- 상위클래스(부모클래스)의 모든 데이터와 행동을 하위 클래스가 물려받는 것
- 상속을 이용하면 하위 클래스는 상위 클래스의 데이터와 행동을 자신의 클래스에 다시 정의하지 않아도 된다.
- 하위 클래스는 상위 클래스에서 상속받은 요소 외에 새로운 데이터와 행동을 추가하여 사용할 수 있다.
- 상위클래스의 요소들을 사용할 수 있기 때문에, 소프트웨어 재사용을 증대시키는 중요한 개념
- 다형성(Polymorphism)
- 하나의 메시지에 대해 각 객체가 가지고 있는 여러 가지 방법으로 응답할 수 있는개념
- 객체에서 동일한 메서드명을 인자값의 유형이나 개수만 다르게 하는 오버로딩이 존재
- 객체에서 상속받은 메서드를 재정의하는 오버라이딩이 존재
- 추상화(Abstraction)
- 어떤 실체로부터 공통적인 부분들만 모아놓은 것
- 객체의 성질을 분해하고, 공통된 성질을 추출하여 슈퍼 클래스를 설정한다.
- 객체지향 설계원칙(SOLID) (★)
- 단일 책임 원칙 (SRP, Single Responsibility Principle)
- 개방 폐쇄 원칙(OCP, Open-Closed Principle)
- 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
- 기존의 코드를 변경하지 않으면서(Closed) 기능을 추가할 수 있도록(Open) 설계
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
- 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
- 부모 클랙스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 작동해야 한다.
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
- 자신이 사용하지 않는 인터페이스 때문에 영향을 받아서는 안 된다.
- 의존성 역전 원칙(DIP, Dependency Inversion Principle)
- 의존 관계를 맺을 때 자주 변화하는 것보다, 변화가 거의 없는 것에 의존해야 한다.
- 구체적인 클래스보다 인터페이스나 추상 클래스와 의존 관계를 맺어야 한다.
- 디자인패턴(Design Pattern) 개념
- 객체지향 프로그래밍 설계를 할 때 자주 발생하는 문제들에 대해 재사용할 수 있도록 만들어놓은 패턴들의 모음
- 이미 만들어져서 잘 되는 것을 활용하여 재사용함으로써 프로그램 최적화에 도움을 준다.
- 효율적인 코드를 만들기 위한 방법론
- 디자인 패턴 구조
- 패턴의 이름과 유형
- 문제 및 배경
- 패턴이 사용되는 분야 또는 배경, 해결하는 문제
- 솔루션
- 결과
- 사례
- 샘플 코드
- GoF 디자인 패턴
- 각각의 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로
- 분류
- 23가지의 디자인 패턴을 정리
GoF 디자인 패턴 분류 (★)
- 생성 패턴
- 객체의 생성과 관련된 패턴
- 객체의 인스턴스 생성을 추상화하는 방법
- 객체의 생성과 참조 과정을 캡슐화하여 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 받지 않도록 한다.
- 생성 패턴 종류
생성 패턴 5가지
- 구조 패턴
- 클래스나 객체들을 조합해 더 큰 구조로 만들 수 있게 해주는 패턴
- 상속을 통해 클래스나 인터페이스를 합성하는 방법을 정의
- 구조 패턴 종류
구조 패턴 7가지
- 행위 패턴
- 클래스나 객체들이 상호작용하는 방법을 정의한 패턴
- 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하여 결합도를 최소화할 수 있도록 도와준다.
- 행위 패턴 종류
행위패턴 11가지
이러한 설명은 객체지향 프로그래밍과 디자인 패턴에 대한 포괄적이고 구체적인 이해를 제공합니다.
2024년에 정보처리기사를 따기 위해 노력하는 모두에게 행운을 빕니다!