spring

[모각코] oop for spring

cheesecrust1008 2024. 3. 8. 18:06

jdk, jre, jvm

jdk 안에 jre 안에 jvm 이 있다. 

jre 가 있어야한다.


메모리는 코드 실행 영역과 데이터 저장 영역이 있다

이때 객체 지향언어의 경우에는 데이터 저장 영역을 크게 세가지로 나눈다.

1. static 영역
2. stack 영역
3. heap 영역



멀티 스레드는 stack 영역을 스레드의 수 만큼 분할 해서 사용합니다.

멀티 프로세스는 각자의 메모리 영역을 가진다,

------------------------------------------------

구조적 프로그래밍 - 분할 정복의 개념, 

클래스는 개념, 인스턴스는 구체적인 개체

따라서 붕어빵틀과 붕어는 다르다.

붕어빵과 붕어의 예시는 팩토리 메서드에 가깝다.
예시) 사람 김연아 = new 사람()

새로운 사람을 만들었는데 김연아가 탄생보다는 사람 개념을 구체적인 김연아에 잇는것이 자연스럽다

클래스의 개념을 통해 object를 구현하는 것이다. object가 구현된 것에 초점을 맞춘다면 이를 인스턴스라고 부른다.

new로 생성한 것은 heap 메모리에 할당되고, 그 주소를 스택에 있는 변수가 가리키는 것이다

---

### 객체지향 4대 특징 
추상화

추상화는 모델링이다. 
이 의미는 공통된 속성들을 뽑아내는 것이다. 
이때 개체들에게 공통된 변수들은 정적 변수들로 뽑아내기도 한다. 

heap 영역의 객체는 참조가 끊어졌을떄 자바에서 가비지 컬랙터가 수거하는데 이 시점은 아무도 알지 못한다.

힙의 메모리 사용 방식

객체 변수는 객체 안에서 여러 메서드들이 공유하는 공유 자원이다.

정적 변수는 여러 객체들이 공유한다. 

이런 공유 자원들은 할당하지 않아도 0으로 초기화 된다.
클래스 들은 맨 처음에 스태틱 영역에 배치 <- 이 시점

---
상속

재사용 + 확장

상속의 의미는 특성까지 아래 클래스에게 주는 의미로 확장의 의미에 가깝다.

따라서 상위 하위의 개념으로 접근하는 것이 자연스럽다.

ex) 동물 하마 = new 포유류( ) 

네이밍에 있어서도 클래스는 분류의 느낌이 간하도록, 객체는 사물의 이름으로 지어야한다. 

하위 분류는 상위 분류이다. 
 -> is a, kind of

특성 재사용, 확장, kind of 만족

다중 상속이 없는 이유 : 만약의 두 인터페이스에서 같은 메서드를 구현하라고 지시한다면, 문제가 생깁니다.

상위 클래스는 물려줄 특성이 많을 수록 좋고, 인터페이스는 강제할 메서드가 적을수록 좋습니다. ( LSP, ISP)

상위 클래스는 특성들을 물려주고, 인터페이스는 동작을 구현하도록 한다. 
특성과 동작을 구분...?

하위 클래스의 경우 상위 클래스의 특성을 확장하고 인터페이스의 요구사항은 구현하는 것이다. 

상위 객체의 타입으로 선언된 변수가 하위 객체의 인스턴스를 가리킬 수 있지만, 반대는 불가능하다. 
(암묵적 casting)

그런데, 이렇게 상위 객체의 타입으로 변수가 선언된 경우 하위 객체에서 구현한 메서드 들은 활용하지 못한다. 

uml 표기법에서 상속은 상위 클래스를 가리키며, 상위 클래스 상속의 경우 실선, 인터페이스의 경우에는 점선으로 나타낸다. 

---
다형성

상위 클래스의 타입이더라도 하위 클래스의 인스턴스를 가리키고 있다면 해당 하위 인스턴스에서 재정의한 ( 오버라이딩 ) 메서드가 호출된다. 

오버라이딩, 오버로딩

오버라이딩 : 재정의
오버로딩 : 중복 정의 

---
캡슐화 


정적 멤버에 접근할 때에는 (클래스명.정적 멤버) 형식 접근이 권장된다, 그 이유는 공통된 자원을 다루기 위함으로, 다음과 같이 다룰때 의미가 더 전해진다. 
또한 물리적으로도 클래스의 정적 멤버는 바로 접근하지만, 객체의 이름을 터고 가면 건너서 가야하기 때문이다.

---
참조 변수의 복사 

call by value : 스택 메모리에 값을 저장, 이 저장된 값으로 부른다
call by reference : 스택 메모리에 힙에 할당된 곳의 주소를 저장한다. 이 주소를 통해 부른다. 

'spring' 카테고리의 다른 글

[모각코] 자바가 확장한 객체 지향  (0) 2024.03.29
[ 모각코 ] 소프트웨어 아키텍쳐  (1) 2024.03.22
[ 모각코 ] spring IOC container  (0) 2024.03.15