느슨한 결합이란: 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것.
마우스의 상태를 속성(property)으로 정하고 클릭, 이동을 메서드(method)로 정해서 코드만 보고도 인스턴스 객체의 기능을 상상할 수 있게 작성
은닉(hiding): 구현은 숨기고, 동작은 노출시킴
은닉이란: 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것
은닉화의 특징을 살려서 코드를 작성하면 객체 내 메서드의 구현만 수정하고, 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.
추상화
내부 구현은 복잡할지라도, 실제로 노출되는 인터페이스(interface)는 단순하게 만드는 것.
ex) 컴퓨터의 내부 구조는 아주 복잡하지만, 우리에게 보이는 부분 (화면, 마우스, 키보드)는 단순하게 되어있음
캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있음
상속
부모 클래스의 특징을 자식 클래스가 물려받는 것
사람(Human)이라는 클래스가 있고, 추가로 학생(Student)라는 클래스를 작성한다고 할 때 앞서 구현되었던 Human 클래스에 있는 속성과 메서드를 전부 다시 구현한다면 너무 번거로울 것임. 따라서 Student 클래스를 작성할 때 Human 클래스를 상속하게 하면(재사용성) 효율적으로 코드를 작성할 수 있음
다형화
같은 메소드라도 객체에 따라 각기 다른 방식으로 구현될 수 있음
다형성으로 인해 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해짐.