객체지향 4대 특성
캡상추다 ▶ 클래스를 통해 구현됨(객체)
- 캡 : 캡슐화 : 정보 은닉
- 상 : 상속 : 재사용
- 추 : 추상화 : 모델링
- 다 : 다형성 : 사용 편리
클래스 vs 객체 != 붕어빵틀 vs 붕어빵
붕어빵틀은 붕어빵의 팩토리이다.
클래스 : 객체 = 펭귄 : 뽀로로 = 사람 : 김연아
클래스 : 분류에 대한 개념이지, 실체가 아니다.
객체 : 실체이다.
뽀로로, 김연아 : 객체 참조 변수
추상화
= 모델링 = java의 class 키워드
: 구체적인 것을 분해해서 관찰자가 관심있는 특성만 가지고 재조합하는 것.
추상 : 여러가지 사물이나 개념에서 공통되는 특성/속성 따위를 추출하여 파악하는 작용.
객체 : 세상에 존재하는 유일무이한 사물(unique)
생물이건 무생물이건 속성, 기능을 가진다.
클래스 : 분류, 집합
같은 속성, 기능을 가진 객체를 총칭한다.
+) 클래스를 통해 객체를 만들었을 때, 이 객체는 object 라는 표현보다는 instance 라는 표현을 사용함.
애플리케이션 경계 = 컨텍스트(context)
객체지향의 추상화
구체적인 것을 분해해서 관심 영역(애플리케이션 경계)에 있는 특성만 가지고 재조합하는 것. = 모델링.
모델은 추상화를 통해 실제 사물을 단순하게 묘사함.
클래스 설계 시 추상화는 매우 중요하게 사용이 됨.
모델링 과정 :
애플리케이션 경계 정하기 → 추상화 잘!! 하기 → 클래스 완성
확장
상속 통한 추상화/구체화
인터페이스 통한 추상화
다형성 통한 추상화
추가 1
클래스 | 객체 참조 변수 | = | new | 클래스 | ( ) |
객체참조변수의 자료형 | 생성된 객체를 참조할 수 있는 변수 | 할당문 | 새로운 | 만들고자하는 객체의 분류 | 메서드 |
클래스의 인스턴스, 즉, 객체를 생성하기 위해 객체 생성자를 호출 | |||||
새로운 객체를 하나 생성해 그 객체의 주소값(포인터)을 객체참조변수에 할당 |
클래스의 멤버메소드 : 밑줄, static 키워드.
객체의 멤버메소드 : static 키워드 붙지 않음.
추상화를 통한 모델링
= 4가지 요소 설계
클래스 설계
- 클래스 멤버 ( static ) - 클래스 멤버 속성/메소드 ▶ static 영역에 상주.
∴ 클래스멤버 = 스태택멤버 = 정적멤버 : 객체의 존재 여부에 상관 없이 쓸 수 있다.
정적 속성은 해당 클래스의 모든 객체가 같은 값을 가질 때 사용하는 것이 기본이다.
T메모리의 스태틱 영역에 클래스가 배치될 때 클래스 내부에 메모리 공간을 확보한다.
- 객체 멤버 - 객체 멤버 속성/메소드 ▶ 객체가 클래스의 인스턴스
∴ 객체멤버 = 인스턴스멤버 : 힙영역에 객체 생성시 각 객체 안에 멤버 속성을 위한 메모리 공간은 각 객체 생성시 활용.
추가 2
유사어
클래스 멤버 = 정적 멤버 = 스태틱 멤버
객체 멤버 = 오브젝트 멤버 = 인스턴스 멤버
필드 = 속성 = 프로퍼티(property)
변수 공간 = 메모리 공간
지역 변수 | 클래스 속성 | 객체 속성 |
스택 영역 | 스태틱 영역 | 힙 영역 |
개발자가 별도로 초기화해주지 않으면 쓰레기값을 가짐. 한 지역에서만 쓰임. |
전역, 정적 영역을 통해 초기화 | 하나의 객체 안에서 다수의 메서드가 공유 생성자 통해 초기화 |
초기화가 굳이 필요하지 않음. 별도로 초기화해주지 않아도 자동 초기화됨. 이러한 멤버변수는 공유변수 성격을 가짐. |
상속
재사용 + 확장
= 분류도
=! 조직도
객체지향의 상속 (extends)
상위클래스 특성을 하위클래스에 상속(특성상속), 더 필요한 특성은 추가(확장)
상위(슈퍼) 클래스(분류) : 추상화, 일반화 ↑
하위(서브) 클래스(분류) : 구체화, 특수화 ↑
하위클래스는 상위클래스다. = 하위클래스 is a kind of 상위클래스
LSP (리스코프 치환 법칙)
재사용 : 하위클래스에서 상위클래스 특성을 상혹하면 상위클래스 메서드를 다시 작성하지 않아도 그냥 가져와서 쓸 수 있음.
ex) 최상위클래스인 Object를 모든 클래스가 상속받기에 Object의 특성인 toString()메서드를 모두가 사용할 수 있음.
다중 상속
자바는 다중상속이 왜 안되는 걸까?
∵ 다이아몬드 문제 (사람과 물고기를 둘 다 상속받은 인어가 수영을 한다면, 사람처럼 팔다리를 움직이나? 아니다. 물고기처럼 지느러미를 쓴다.)
어떤 대안이 있는가?
인터페이스를 도입!!
인터페이스
상속 | 인터페이스 |
하위클래스 is a kind of 상위클래스 | 구현클래스 is able to 인터페이스 |
하위클래스는 상위클래스의 한 분류이다. | 구현클래스는 인터페이스 할 수 있다. |
ex) 고래는 동물의 한 분류 | ex) 고래는 헤엄칠 수 있다. |
하위클래스가 상위클래스의 특성(속성,메서드)을 상속받을 때는, 풍성하게(LSP),
인터페이스는 클래스가 '무엇을 할 수 있다' 라는 기능을 강제하는데, 강제는 적게(ISP)
인터페이스의 종류로는,
Serializable, Cloneable, Comparable, Runnable 등등이 있다.
+ ) 하위클래스 인스턴스가 생성될 때 상위클래스의 인스턴스도 함께 생성된다.
다형성
오버라이딩
: 같은 메서드 이름, 같은 인자 목록으로 상위 클래스 메서드를 재정의
▶ 맨 위에 올라탄 애만 보임.
상위클래스 타입의 객체 참조 변수에서, 하위 클래스가 재정의한 메서드를 자동으로 호출해준다.
∴ '형 변환 / instanceof 연산자 통한 하위클래스가 뭔지' 에 대해 신경쓸 필요가 없다.
오버로딩
: 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의
▶ 나란히 옆으로 적재한 애들이 다 보임.
스프링 입문을 위한 자바 객체 지향의 원리와 이해 3
'Web > SrpingBoot' 카테고리의 다른 글
[Spring] MVC 패턴과 MVC1, MVC2 및 Spring Framework에서의 MVC2 정리 (0) | 2023.08.05 |
---|---|
Maven 과 Gradle 이란? (0) | 2023.08.02 |
JAR 와 WAR 란? (0) | 2023.08.01 |
스프링 입문을 위한 자바 객체 지향의 원리와 이해 2 (0) | 2023.07.19 |
스프링 입문을 위한 자바 객체 지향의 원리와 이해 3 (0) | 2023.07.02 |