객체지향 언어란?(OOP, object Oriented Programming)
- 객체를 먼저 만들고 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법이다.
예로 들면 현실 세계에서 어떤 제품을 만들때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 제품을 완성하는것도 객체지향이라고 할수있다.
객체란?(Object)
- 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으며 식별 가능한것을 말합니다.
예로 들면 물리적으로 존재하는 자동차, 자전거, 학생과 추상적인 강의, 회원, 등이 모두 객체가 될수 있다.
- 객체는 속성과 동작으로 구성되어있다.
예로 들면 자동차의 색상, 모델명 같은 속성이 달리고 학생은 공부하다, 웃다, 공부하다 등 동작이 있는데 이것들을 속성을 필드(Field) 동작을 메소드(Method)라고 부른다.
클래스란?(Class)
- 클래스에는 객체를 생성하기 위한 설계도라고 생각하면 된다.
예로 들면 붕어빵을 만들기 위해서는 붕어빵틀이 필요하며 붕어빵틀이 클래스이고 붕어빵이 객체되는것이다.
객체 지향 프로그래밍 개발 단계
- 1단계는 클래스를 설계합니다.
- 2단계는 설계된 클래스를 가지고 사용할 객체를 생성합니다.
- 3단계는 생성된 객체를 이용합니다.
객체 지향 프로그래밍 특징
- 캡슐화(Encapsulation)
캡슐화란 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다.
외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용이 가능하다.
예로 들면 전자제품의 중요한 부품을 사용자의 실수로 만지지 못하도록 안쪽에 캡슐화해서 숨겨두는것을 의미한다.
JAVA의 접근 제한자를 통해 캡슐화의 구조에 대해서 이해할수 있다.
- 상속(Inheritance)
상속이란 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할수 있는것을 말한다.
예로 들면 상위객체를 부모라고하고 하위객체를 자식이라고 한다면 자식은 아무것도 하지 않아도 부모가 물려준 재산을 가지고 사용할수있는 것이다.
하위 객체는 상위 객체가 가지고 있는 필드와 메소드를 따로 작성하지 않아도 사용이 가능하며 수정이 필요하다면 상위 객체만 수정하면 되기 때문에 유지보수가 효율적이다.
- 다형성(Polymorphism)
다형성이란 같은 타입이지만 실행 결과에 따라 다양한 개체를 이용할 수 있는것을 말한다.
예로 들면 자동차의 타이어 같은경우 제조회사 마다 성능이 다르게 되는것을 말한다.
- 추상화(Abstraction)
추상화란 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 말한다.
예로 들면 경차, SUV, 버스 라는 여러 객체가 있고 이 객체를 하나로 묶었을때 자동차라는 추상적인 객체로 정의하는 것을 의미한다
객체 지향 프로그래밍의 5대 원칙(SOLID)
- 단일 책임 원칙(SRP : Single Responsibility Principle)
한 클래스는 하나의 책임을 가진다는 것을 말한다.
즉, 변화 등에 의해 클래스가 변경되는 이유는 하나여야된다는 것이다.
- 개방 폐쇄 원칙(OCP : Open-Closed Principle)
확장에는 열려있으나 변경에는 닫혀 있어야 된다는 것을 말한다.
확장이라는 것은 변경사항이 발생됐을때 효율적으로 코드가 추가가 되거나 수정이 되는것을 의미한다.
변경이라는 것은 객체를 직접 수정하지 않고도 변경 사항을 적용할 수 있도록 만드는것을 의미한다.
- 리스코프 치환 원칙(LIP : The Liskov Subsitution Principle)
하위 객체를 재정의 할때 상위 객체의 의미를 깨면 안되는 것이다.
- 인터페이스 분리 원칙 (ISP : Interface Segregation Principle)
한 인터페이스 보다 세분화된 인터페이스가 낫다는것을 의미한다.
즉 세분화된 인터페이스를 꼭 필요한 것만 쓸수 있도록 하는것을 말한다.
- 의존관계 역전 원칙 (DIP : Dependency Inversion Principle)
코드가 구체적인 클래스 보다는 추상적인 클래스에 의존해야된다는것을 의미한다.
구체적으로 진행을 하다보면 중간에 변경사항이 생긴다면 변경하기 어렵기때문에 추상적으로 진행을 해서 유연하게 반응할수 있도록 한다는것이다.
Reference
Blog
Blog
Blog