정의
컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 객체들의 모임으로 바라보고자 하는 것
특징
1. 추상화
- 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 것을 의미
- 객체 지향적 관점에서 클래스를 정의하는 것이 추상화의 대표적인 예시
2. 다형성
- 같은 이름을 가진 메소드라도 각 하위 클래스의 상황에 맞게 다르게 구현될 수 있게 하는 것을 말한다.
- 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있다는 것이다.
- 오버로딩, 오버라이딩이 있다.
3. 상속
- 상위 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우 하위 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 하는 것이다.
- 복잡도를 줄이고 중복을 없애기 위함
4. 캡슐화
- 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 캡슐로 만들어 외부로부터 보호.
- 접근 제한자를 사용해 필요한 기능만 외부로 노출되도록 하고 그렇지 않은 기능은 외부로부터 보호한다.
- 이를 통해 데이터 보호 및 데이터 은닉 기능을 제공할 수 있다.
객체지향 5원칙
1. SRP(Single Responsiblility Principle)
2. OCP(Open Closed Principle)
3. LSP(Liskov Substitution Principle)
- 하위 타입은 상위 타입을 대체할 수 있어야 한다.
4. ISP(Interface Segregation Principle)
- 클라이언트의 목적과 용도에 맞는 인터페이스를 제공해야 한다.
5. DIP(Dependency Inversion Principle)
- 고수준 모듈은 저수준 모듈을 의존하지 않아야 한다.