- 객체지향 언어란 ?
-사물이나 개념처럼 독립되고 구분되는 각각의 객체
클래스
-객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념,
사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의함.
추상화
-유연성을 확보하기 위해 구체적인 것은 제거한다는 의미.
프로그램에서 필요한 공통점을 추출하고, 불필요한 공통점을 제거하는 과정
캡슐화
-추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법을 말한다.
클래스의 가장 중요한 목적인 데이터의 접근제한을 원칙으로 하여 클래스 외부에서 데이터의 직접 접근을 막고, 대신 데이터를 처리하는 함수들을 클래스 내부에 작성하는 방법을 캡슐화라고 한다.
상속
-자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다. 기능의 일부분을 변경해야 할 경우 자식 클래스에서 상속받은 그 기능만을 수정해서 다시 정의하게 되는데, 이러한 작업을 '오버라이딩(overriding)'이라고 한다. 상속은 캡슐화를 유지하면서도 클래스의 재사용이 용이하도록 해 준다.
다형성
-하나의 변수, 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다.
다형성의 실세계 비유
역할과 구현으로 세상을 구분하는게 좋다.
( 역할 : 인터페이스 / 구현 : 인터페이스를 구현한 클래스, 구현 객체)
예제)
운전자의 역할과 자동차의 역할이 있다.
자동차는 K3, 아반떼, 테슬라모델3도 될 수 있다.
구현만 바뀌었기때문이다.
자동차가 바뀌어도 운전자에게 영향을 주지 않는다!
자동차를 새로 바꾼다고 면허를 새로 따야 되는건 아니기 때문이다.
유연하고 변경이 용이하다는 말은 이 말이다.
클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있다.
예제)
로미오와 줄리엣 공연, 로미오와 줄리엣 역할이 있다.
로미오 역할엔 장동건, 원빈이여도 상관이없고
줄리엣 역할엔 김태희, 송혜교가 해도 상관이 없다.
로미오는 줄리엣역할이 누구인지 상관이 없다.
줄리엣도 로미오가 누구인지 상관이 없다.
유연하고 변경이 용이하다는 말이 이 말이다.
역할과 구현으로 구분하면 세상이 단순해지고 유연해지며 변경이 편리해진다.
**다형성의 본질
클라이언트를 변경하지않고 서버의 구현기능을 유연하게 변경할 수 있다.**
SOLID
클린코드로 유명한 로버트 마틴이 좋은 객체지향의 설계 5가지를 정리
단일 책임 원칙(Single Responsiblity Principle; SRP)
-소프트웨어의 컴포넌트는 단 하나의 책임만을 가져야 한다.
-중요한 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른것이다.
개방 폐쇄 원칙(Open Close Principles; OCP)
-확장에 대해선 열려 있어야 하고 수정에 대해선 닫혀 있어야 한다.
-기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록(Open) 해야 한다.
리츠코프 치환 원칙(Liskov Substitution Principle; LSP))
-자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.
인터페이스 분리의 원칙(Interface Segregation Principle; ISP)
-자신이 사용하지 않는 메서드는 구현하지 않도록 해야 한다.
이런 경우 인터페이스는 쪼개져야 한다.
-하나의 일반적인 인터페이스 보단 여러 개의 구체적인 인터페이스가 낫다.
의존관계 역전 원칙(Dependency Inversion Principle; DIP)
-의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다.
-고차원의 모듈은 저차원의 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존 해야 한다.
-DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미