주제내용객체 지향의 4대 특성 - 캡 ! 상추다 클래스 vs 객체 = 붕어빵틀 vs 붕어빵? 퀴즈캡슐화 : 정보 은닉?정보 은닉정리해보자면상속 : 재사용과 확장성정리하기추상화 : 모델링다형성 : 사용 편의성
주제
상추다 캡 일까 캡상추다일까 상추가 캡일까 캡추상다 다추캡상 상캡다추 ㅋ
내용
삼겹살을 먹을 때 무엇보다 중요한 요소는 바로 좋은 상추다. 필자처럼 삽겹살을 상추에 싸먹지 좋아하는 마니아들은 좋은 상추를 만났을 때 이렇게 외친다. “와우.. 캡! 상추다" - 스프링 입문을 위한 자바 객체 지향의 원리와 이해 -
객체 지향의 4대 특성 - 캡 ! 상추다

클래스 vs 객체 = 붕어빵틀 vs 붕어빵?
- 클래스 객체명 = new 클래스(); ⇒ 납득 가능
- 붕어빵틀 붕어빵 = new 붕어빵틀(); ⇒ 납득 가능? 불가능
퀴즈
- 사람은 클래스인가? 객체인가?
- 김연아는 클래스인가? 객체인가?
- 뽀로로는 클래스인가? 객체인가?
- 펭귄은 클래스인가? 객체인가?
⇒ 클래스 : 객체 = 펭귄 : 뽀로로 = 사람 : 김연아

- 클래스와 객체의 관계 - 분류(class)와 사물(Object)의 관계
캡슐화 : 정보 은닉?
- 접근 제어자
- public : 모두가 접근 가능
- protected : 상속 / 같은 패키지 내의 클래스에서 접근 가능
- default : 같은 패키지 내의 클래스에서 접근 가능
- private : 본인만 접근 가능
- 캡슐화
- 데이터를 공용 메소드를 통해서만 접근할 수 있도록 허용하는 방법이다.
- 관련된 요소들을 묶음으로써 캡슐 내부와 외부를 구별 짓기 때문에 캡슐 내에 속한 부분과 캡슐 외에 속한 부분들에 대해 구분이 명확하게 되어있다.
- 특정 객체 속에 있는 데이터와 함수들을 다른 객체 속에 있는 데이터와 함수들과 구별이 이뤄진다는 의미이다.
- 캡슐화의 특성
- 추상화 단위가 된다.
- 캡슐화는 관련된 데이터와 함수들을 하나의 캡슐 단위로 묶어주기 때문에 추상화 단위가 된다.
- 재사용의 단위가 된다.
- 객체지향에서 캡슐화의 단위는 클래스 단위로 정의하고, 클래스를 통해 객체 단위로 생성되어 움직인다.
정보 은닉
- 모든 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법
- 정보 은닉의 목적
- 코드가 구체적인 것들에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시켜 기능의 교체나 변경이 쉽도록 함. ⇒ 유연성
- 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능함
- 연동할 구체적인 구현이 없는 상태에서도 정확한 연동 코드의 생성이 가능함
- 코드를 적절히 모듈화하여 주어진 코드의 일부를 이해하기 위해 필요한 정보의 양이 적기 때문에 코드를 이해하기 쉽다.
- 상호 교환이 필요한 정보의 양이 최소화하면서 독자적으로 각 모듈에 대한 작업을 진행할 수 있기에 개발 기간을 단축시킬 수 있다.
정리해보자면
- 캡슐화는 관련된 요소들을 묶음으로써 캡슐 내외부를 구별 짓는 장치이다.
- 특정 객체 속에 있는 데이터와 함수들이 다른 객체 속에 있는 데이터와 함수들과 구별된다.
- 객체들 끼리 서로 상대방의 인터페이스만 볼 수 있다.
- 각 객체가 가지고 있는 데이터는 외부에서 볼 수 없다.
- 정보 은닉은 캡슐내의 요소들에 대한 세부 구현사항을 외부에 숨기는 장치
- 캡슐화되어 있는 데이터와 함수에 대해 외부에서 함수가 어떻게 구현되어 있는지 세부사항을 숨긴다.
- 캡슐화가 되어 있다고 해서 반드시 정보은닉이 되는 것은 아니다.
상속 : 재사용과 확장성

- 상위 클래스의 특성을 하위 클래스에서 상속하고 더 필요한 특성을 추가, 확장해서 사용할 수 있다.
- 상위 클래스 쪽으로 갈수록 추상화, 일반화 되었다.
- 하위 클래스 쪽으로 갈수록 구체화, 특수화 되었다.
public class 포유류 extends 동물 { ... }
- extends를 사용하여 확장할 수 있다.
- ~ is a 관계를 만족한다
- 포유류는 동물이다. 고래는 포유류다.
- 더 정확하게 ~ is a kind of
- 고래는 포유류의 한 분류이다.
정리하기
- 객체 지향의 상속은 상위 클래스의 특성을 재사용하는 것이다.
- 객체 지향의 상속은 상위 클래스의 특성을 확장하는 것이다.
- 객체 지향의 상속은 is a kind of 관계를 만족해야 한다.
추상화 : 모델링

- IT 용어로 바꿔 보자면 ?
- 추상화란 구체적인 것을 분해해서 관심 영역에 있는 특성만 가지고 재조합하는 것
- 모델링
- 모델링
- 실제 사물을 정확히 복제하는 것이 아닌 목적에 맞게 관심 있는 특성만을 추출해서 표현하는 것
다형성 : 사용 편의성
public class 펭귄 extends 동물 { @Override public void showName() { ... } // 오버 로딩 public void showName(String name) { ... } }
- 오버라이딩
- 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의
- 오버로딩
- 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의
- 사용 편의성 ?
- 함수명 하나를 가지고 인자 목록만 달리하면 되니 사용에 편리하다.
- 하위 클래스가 재정의한 메서드를 알아서 호출해 줌으로 형변환이나 instanceof 연산자를 사용해서 하위 클래스가 무엇인지 신경 쓰지 않아도 된다.