Web/SrpingBoot

스프링 입문을 위한 자바 객체 지향의 원리와 이해 4

나는나는용 2023. 7. 19. 05:31
728x90

객체지향 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

728x90