(1) 객체 지향 ***
1. 객체 지향 개념
- 실세계의 개체를 속성과 메소드가 결합한 형태의 객체로 표현
2. 객체지향 구성 요소
- 클래스
- 데이터를 추상화하는 단위
- 유사한 객체들을 묶어서 하나의 공통된 특성을 표현
- 속성 → 변수, 행위 → 메서드
- 객체
- 행위 → 클래스에 정의된 행위를 공유 ⇒ 메모리 경제적 사용
- 객체마다 각각의 상태, 식별성 가짐
- 메소드
- 생성된 객체를 사용하는 방법
- 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산
- 전통적 시스템의 함수/프로시저에 해당
- 메시지
- 객체 간 상호작용을 위한 수단 → 상호작용은 메시지를 통해
- 메시지는 객체→객체로 전달
- 인스턴스
- 클래스에 속한 각각의 객체
- 실제 메모리 상에 할당
- 속성
- 객체들이 가지고 있는 데이터 값들을 단위별로 정의
3. 객체지향 기법
- 캡슐화
- 서로 관련성이 많은 데이터, 함수를 묶음으로 처리
- 결합도 $\downarrow$ → 재사용 용이
- 인터페이스 단순화
- 정보 은닉과 관계가 깊음
- 변경 발생 시 오류 파급 효과 $\downarrow$
- 상속성
- 상위 클래스의 속성, 메소드를 하위 클래스에서 재정의 없이 사용
- 다형성
- 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답
- 오버로딩 : 함수 이름은 같지만, 매개변수 유형/개수가 다름
- 오버라이딩 : 함수 이름, 매개변수 같음 ⇒ 상위 클래스 메소드를 하위 클래스에서 재정의
- 추상화
- 공통 성질을 추출하여 추상 클래스 설정
- 기능, 자료, 제어 추상화
- 정보은닉
- 코드 내부 데이터와 메소드 숨김 → 공개 인터페이스를 통해서만 접근 가능
- Side Effect 최소화 가능
- 관계성
- 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계
- 연관화
- is—member-of 관계
- 객체의 참조 및 이용 관계
- 같은 계층에 속하는 클래스들 사이의 상호 의존성을 보여주는 비계층적 관계성을 나타냄
- 집단화
- is part of 관계
- 서로 관련 있는 여러 객체를 묶어 1개의 상위 객체를 만듦
- 일반화와 달리 상위 클래스 성질이 하위 클래스로 상속X
- 분류화
- is-instance-of 관계
- 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스
- 일반화
- is-a 관계
- 클래스들 간의 개념적인 포함 관계
- 상위 클래스 특성을 하위 클래스가 상속
- 특수화
- is-a 관계
- 상위 클래스를 상속 받으면서 하위 클래스에서 재정의하여 고유한 특성 갖는 관계
4. 객체지향 설계 원칙(SOLID)
- 단일 책임 원칙(Single Responsibility Principle)
- 하나의 클래스 → 하나의 목적을 위해서만 생성 ⇒ 클래스의 모든 서비스는 하나의 책임 수행해야한다
- 객체지향 5원칙 중 나머지 4원칙의 기초 원칙
- 개방 폐쇄 원칙(Open Close Principle)
- 소프트웨어 구성 요소는 확장에는 열려있고 변경에는 닫혀있어야 한다.