2022년 03월 22일 TIL
OOP 이야기
1. 객체지향 프로그래밍
- 프로그램이 거대화 하면서 이를 해결하기 위해 등장하였다.
- 거대화된 프로그램의 동작을 객체들에게 나눠서 수행
객체
-
개념적인 용어 : 객체
-
기술적인 용어 : class, instance
-
객체는 작은 기능을 수행하며 서로 협력한다.
-
객체는 type으로 구분한다. type은 class로 만들 수 있다.
-
implements Runnable
- 스레드를 생성한다.
class MyObject extends Object implements Runnable { }
2. 객체지향의 특성
캡슐화
객체는 스스로 동작할 수 있어야 한다. 외부에 의존하거나 외부의 침략을 제한해야한다.
-
완성도
기능을 수행하는 단위로써 완전함을 가진다. -
정보 은닉
밖에서 객체 내의 저옵를 접근하지 못하도록 한다. -
접근지정자
-
private
객체 소유 -
protected
상속된 객체에서도 접근 가능 -
(friendly)
같은 패키지 내에서 접근 가능(패키지 가능성, 패키지 내에서만 특정 객체의 접근을 허용하는 경우) -
public
누구든지 접근 가능
-
상속
- 상위, 부모, super, [추상]
- 하위, 자식, (this), [구체]
- 기능으로 접근하지 마라! 추상과 구체의 관계로 접근하라!
추상화된 객체
- 추상화된 객체 : 추상체
- 구체적인 객체 : 구상체
- 객체간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 한다.
- 다형성을 위해 추상체를 사용한다.
다형성
- type을 여러가지로 표현할 수 있도록 한다.
- 필터링된 기능을 제공할 수 있다.
class NaverLogin implements Login, Portal {...}
Login login = new NaverLogin();
login.login();
Portal portal = new NaverLogin();
portal.portal();
Login → login() O, portal() X
Portal → login() X, protal() O
3. 객체지향 설계
UML: Class Diagram
객체지향 설계를 설명하기 위한 도구
- 일반화(extends)
- B -> A, B가 A를 상속하였다.
- 실체화(implements)
- B -> A, B가 A를 구현하였다.
- 의존
- A -> B, A가 B를 의존한다.
- A가 동작할 때 B가 있어야한다.
- DI를 생각해라!
- 연관
- 관련은 있는데 정확한 관계를 모른다.
- 직접연관
- A -> B, A(주체)가 B(대상)를 사용한다.
- 집합연관
- A -> B, A가 B를 소유한다.
- 하지만 B가 없더라도 A가 존재하는데 문제가 되지 않는다.
- 복합연관
- A -> B, A가 B를 소유한다.
- A가 존재하기 위해서 B가 반드시 있어야 한다.
어떻게 하면 객체를 잘 나누고 연관지을 수 있느냐?
- 객체지향 5가지 원칙
- SRP: 수정이될 때 수정되는 이유는 하나 때문이어야 한다.
- OCP: 수정에는 닫히고 확장에는 열려 있어야 한다.
- LSP: 추상객체로 사용되는 부분에 구상객체가 들어가도 아무 문제가 없어야 한다.
- ISP: 필요 없는 구현하지 않도록 인터페이스를 분리한다.
- DIP: 변화하기 쉬운 것 또는 자주 변화하는 것보다 거의 변화가 없는 것에 의존해야 한다.
원칙에 따라 설계하니 공통점이 보이내 → 23가지 디자인 패턴
Author And Source
이 문제에 관하여(2022년 03월 22일 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yshjft/2022년-03월-22일-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)