: 프로그램 설계철학으로 객체로 그룹화 된다.
: 데이터 (속성)와 기능 ( 메서드 ) 을 따로 정의하는 것 X
➡️ 하나의 객체 안에 넣어서 묶는 것 (데이터와 기능의 느슨한 결합)
느스한 결합(Loose Coding) : 코드 실행순서에 따른 절차적 코드 X
➡️ 코드가 상징하는 실제모습과 닮게 코드를 모아 결합
➡️ 외부에서 변수의 값을 마음대로 바꿀 수 없도록 내부의 정보를 외부로 부터 은폐함 ( 데이터 은닉 )
정보은닉(hidning) : 내부 데이터, 구조가 외부로 노출되지 않도록 만드는 것 ( 객체 외부에서 필요한 동작만 노출시킴 )
속성의 직접적인 접근을 막고 설정하는 함수 ( setter ), 불러오는 함수 ( getter ) 이용
자바에서는 대표적으로 public, defalut, protected, private의 접근자를 통해 구현이 가능 ( 오른쪽으로 갈수록 더 좁은 범위를 가짐 )
: 내부 구현은 복잡하지만 실제로 노출되는 부분은 단순하게 만드는 것이다.
실제로 노출되는 부분 ( interface, API application programing interface )
예를 들면, 전화기는 사람들은 실제로 수화기를 들고 번호를 누르면 전화가 걸린다고 생각하지만,
실제로 전화기 내부에서는 어떤 현상이 일어나는지 생각하지 않는다 !
캡슐화와 구분할 필요가 있다
: 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것
새로 학생이라는 클래스를 생성하는 것 보다 , 사람이라는 클래스를 상속받아 학생 클래스에 추가로 속성이나 메서드를 추가하는 것이 효과적이다.
➡️ 사람과 학생은 비슷한 속성이 많기 때문 !
속성: ( 이름, 나이 ) + 성적
메서드 : ( 먹다 ) + 등교하다
: 객체 지향 프로그래밍은 다양항 형태를 가질 수 있다.