객체의 속성을 보호하기 위해서 사용
자신이 가지고 있는 속성에 대해서는 해당 상태를 변경하는 기능을 제공해야 함
실물 객체가 가진 기능을 모두 제공해야 함
각각의 메서드는 서로 관련성이 있어야함 ⇒ 속성의 상대되는 기능을 제공해야 함 ex. 차량의 렌탈이 있다면 반납도!
객체 안의 메서드는 객체 안의 속성을 처리해야 하며, 다른 객체를 전달받아 다른 객체에 정의된 속성을 직접 처리하면 안됨
단, 메서드 실행에 필요한 값들은 객체의 형태가 아닌 매개변수의 형태로 전달되어져야 함
destroy()
, disconnect()
, quit()
등private
로 선언
- 객체지향의 패러다임 중 하나인 추상화 제공
실제로 어떻게 동작하는 지는 외부에서 이해할 필요가 없고, 단순 호출만으로 해당 기능을 실행할 수 있음
객체 단위로 프로그램 설계 가능
- 재 사용성 향상
한 객체에 관련된 속성 및 메서드는 모두 캡슐화의 형태로 제공
객체의 모듈성과 응집도가 높아짐 ⇒ 재사용성 높아짐
절차적 프로그래밍에서 메서드 재사용 하면? 함수가 참조하고 있는 전역변수 및 내부에서 호출하는 메서드가 미치는 영향을 모두 체크
객체에서 메서드 재사용 하면? 단일 객체에만 영향을 주기에 재사용성 높음
즉, 유지보수의 효율성이 향상
‘캡슐화 코딩’ : 변수는 private
로 선언, 메서드는 public
으로 선언 ⇒ 무결성을 위해!
Getter/Setter 를 제외하고, public method
는 입력된 매개변수를 Validation(검증)한 후에 실행하는 것을 기본으로 함
Validation을 통해 객체의 값을 바꾸거나 값의 유효성을 가질 수 있음
하위로 내려갈수록 구체화되는 것
프로그램 구조에 대한 이해도 향상
최상위 클래스의 구조를 보고, 하위 클래스의 동작을 이해할 수 있음
재사용성 향상
상속을 이용하여, 해당 클래스에 필요한 속성 및 메서드를 모두 정의하지 않고, 상속을 받아서 사용할 수 있음
확장성 향상
일관된 형태의 클래스 객체를 추가할 수 있어, 간단하게 프로그램 확장 가능
유지보수성 향상
각 객체마다 자신의 메서드를 정의하고 있다면, 코드 수정에서 많은 작업이 필요하지만, 상속을 사용한 경우 일관된 형태로 작성이 가능
하나의 개체가 여러 개의 형태로 변화하는 것
= 모델링