객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각(순차 지향)에서 벗어나 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임
객체 지향의 기본이 되는 원리이자 특징은 총 4가지가 있다.
추후 SOLID 원칙에 관한 포스팅도 할텐데, SOLID 원칙이 객체지향 프로그래밍을 어떻게 하면 잘 할 수 있을까? 에 관한 내용이라면 지금 배우는건 말 그대로 특징이다.
어떤 영역에서 필요로 하는 공통적인 속성이나 행위를 추출하는 작업.
불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만 추출하여 표현하는 것이다.
기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소.
재활용성을 너무 강조하면 잘못된 부분까지 상속을 받을 수 있다. 따라서 불필요한 부분이 있다면 이런건 위임으로 처리해야한다.
상속으로 표현하는 것이 애매하다면 '피터 코드'의 상속 규칙을 참고하면 좋다.
1. 자식 클래스와 부모 클래스 사이에는 역할 수행 관계가 아니어야 한다.
2. 한 클래스의 인스턴스는 다른 서브 클래스의 객체로 변환할 필요가 절대 없어야 한다.
3. 자식 클래스가 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행해야 한다.
4. 자식 클래스가 역할, 트랜잭션, 디바이스 등을 특수화 해야한다.
이 중 하나라도 어길 시 상속관계로 표현하면 안된다.
어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질.
메소드 오버라이딩이나 오버로딩을 생각하면 편하다. 좀 더 넓게 보자면 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있도록 한 것.
일반화와 함께 사용하면 정말 강력한 도구가 된다.
서로 연관된 속성과 기능을 캡슐로 만들어 데이터를 외부로 부터 보호하는 것.
캡슐화를 하는 이유는 두 가지이다.
데이터 보호 : 외부 클래스에 정의된 속성과 기능들을 보호
데이터 은닉 : 내부의 동작을 감추고 외부에는 필요한 부분만 노출
이 두가지는 캡슐화를 통해 가져갈 수 있는 장점이다.
자바에서는 접근제어자를 통해 캡슐화를 진행한다.
https://inpa.tistory.com/entry/OOP-캡슐화Encapsulation-정보-은닉의-완벽-이해
https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95
도서 - 'JAVA 객체지향 디자인 패턴' 정인상 저