🌱 오늘의 주제 : 자바와 객체 지향 (1)
🌱 객체 지향은 인간 지향이다.
- 객체 지향의 출발 : 우리가 주변에서 사물을 인지하는 방식대로 프로그래밍할 수 있지 않을까?
- 객체 지향은 직관적이다.
🌱 객체 지향의 4대 특성 - 캡! 상추다
- 캡 - 캡슐화(Encapsulation): 정보 은닉(information hiding)
- 상 - 상속(Inheritance): 재사용
- 추 - 추상화(Abstraction): 모델링
- 다 - 다형성(Polymorphism): 사용 편의
🌱 클래스 vs. 객체
- 클래스 : 객체 = 팽귄 : 뽀로로 = 사람 : 김연아 = 쥐 : 미키마우스
- 객체 : 세상에 존재하는 유일무이한 사물, 클래스의 인스턴스
- 클래스 : 분류,집합, 같은 속성과 기능을 가진 객체를 총칭하는 개념
🌱 추상화: 모델링
- 추상화 : 구체적인 것을 분해해서 관심 영역(애플리케이션 경계)에 있는 특성만 가지고 재조합 하는 것
- 추상화 = 모델링 = 자바의 class 키워드
추상화의 개념
- 상속을 통한 추상화, 구체화
- 인터페이스를 통한 추상화
- 다형성을 통한 추상화
🌱 요약
- OOP의 추상화는 모델링이다.
- 클래스 : 객체 = 펭귄 : 뽀로로
- 클래스 설계에서 추상화가 사용된다.
- 클래스 설계를 위해서는 애플리케이션 경계부터 정해야 한다.
- 객체 지향에서 추상화의 결과는 클래스다.
클래스 객체_참조_변수 = new 클래스();
클래스 | 객체_참조_변수 | = | new | 클래스 | () |
객체_참조_변수의 자료형 (Type) |
생성된 객체를 참조 할 수 있는 변수 | 할당문 | 새로운 | 만들고자 하는 객체의 분류 | 메서드 |
클래스의 인스턴스, 즉 객체를 생성하기 위해 객체 생성자를 호출 | |||||
새로운 객체를 하나 생성해 그 객체의 주소값(포인터)을 객체 참조 변수에 할당 |
🌱 느낀점
무심코 썼던 객체생성의 개념을 알게 되어서 새로웠다. 특히 객체를 생성하기 위해 객체 생성자를 호출한다는 의미를 정확히 알게 된 계기였다. 또한 클래스와 객체를 펭귄과 뽀로로로 연관 시킨 부분이 가장 이해가 빨랐다. 나 또한 어느 강의에서 붕어빵틀과 붕어빵을 클래스와 객체 비유한 것을 본 적이 있다.
이 글의 저자의 붕어빵 표현을 보면 아래와 갔다.
클래스 객체명 = new 클래스();
붕어빵틀 붕어빵 = new 붕어빵틀(); ???
금형기계 붕어빵틀 = new 금형기계(); ???
- 인간 번역 : 새로운 금형기계를 하나 만들었더니 붕어빵 틀이 되었다???
이 저자는 위 글에서 보듯이 이해가 안되는 예제라며 강조하고 펭귄과 뽀로로 비유하면서, 클래스는 분류에 대한 개념이고 실체가 아니지만, 객체는 실체다 라고 설명한다. 클래스와 객체를 구분하는 간단한 방법은 나이를 물어보는 거라고 예시를 다시 들었다.
사람의 나이는 몇 살인가?
김연아의 나이는 몇 살인가?
뽀로로의 나이는 몇 살인가?
펭귄의 나이는 몇 살인가?
즉, 사람과 펭귄은 클래스고, 김연아와 뽀로는 객체다. ( 김연아와 뽀로로는 나이를 알 수 있기 때문에 ..)
쉽게 넘어 갈 수 있었던 객체와 클래스의 정의 그리고 객체 지향의 추상화는 곧 모델링이다 라는 관점으로 글을 풀으면서 객체 지향의 더 가까워 질 수 잇었던 뜻 깊은 시간이었다.
'Spring > Book - 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
03. 다형성: 사용편의성 (0) | 2023.03.16 |
---|---|
03. 자바와 객체 지향(2) (0) | 2023.01.27 |
02. 자바와 절차적 / 구조적 프로그래밍 (2) (0) | 2023.01.10 |
02. 자바와 절차적 / 구조적 프로그래밍 (1) (0) | 2023.01.05 |
01. 사람을 사랑한 기술 (0) | 2023.01.03 |