아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.

 

📃 참고도서

 

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

COUPANG

www.coupang.com

 

 

 

 

# 상속 : 재사용 + 확장

 

  • 객체 지향에서 상속이란 일반인들이 생각하는 상속이 아닌 확장, 세분화
    슈퍼 클래스 - 서브 클래스(상위 클래스 - 하위 클래스 개념으로 이해해야 한다.
  • 상위 클래스 쪽으로 갈수록 추상화, 일반화
  • 하위 클래스 쪽으로 갈수록 구체화, 특수화

 

 

 

  • 포유류는 동물의 특성을 확장
  • 고래는 포유류의 특성을 확장

 


# 하위 클래스는 상위 클래스다.

 

  • 아버지는 할아버지다??
  • 아들은 아버지다??
  • 딸은 아버지다??

위의 내용은 하위 클래스는 상위 클래스라는 조건에 만족하지 못한다.

 

  • 포유류는 동물이다.
  • 고래는 포율류다.
  • 고래는 동물이다.

 

"하위 클래스는 상위클래스다" 라는 문장은 로버트 C. 마틴이 주장하고 모두가 동의하는

객체 지향 설계 5원칙 가운데 LSP (리스코프 치환 원칙)를 나타내는 말이다.

 

리스코프 치완 원칙(위키백과 바로가기)

 

 

* 자바 언어에서는 inheritance(상속)라는 키워드가 아닌, extends(확장)가 존재한다.

 

 

 

반응형

 

아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.

 

📃 참고도서

 

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

COUPANG

www.coupang.com




# 객체 지향 개념의 탄생

  • 기계 중심의 기계어에서 조금 더 인간을 편하게 하는 언어로 발전 하다 발견
  • "우리가 눈으로 보고, 느끼고, 생활하는 현실 세계처럼 프로그래밍 할 수는 없을까?
    라는 고민 속에서 객체 지향의 개념이 탄생
  • 객체 지향은 현실 세계를 반영한다.
  • 0과 1로 대변되는 기계(컴퓨터)에 맞춰 사고하던 방식을 버리고
    현실세계를 인지하는 방식으로 프로그램을 만들자
    => 객체 지향은 직관적이다.

 

 

 

# 객체 지향을 이해하기 위해 생각해본 큰 그림

 

  • 세상에 존재하는 모든 것은 사물, 즉 객체(Object)이다.
  • 각각의 사물은 고유하다.
  • 사물은 속성을 갖는다.
  • 사물은 행위를 한다.

 

 

# 인간의 인지법인 사물을 분류(class)해서 이해

  • 직립보행을 하며 말을 하는 존재를 사람이라고 분류한다.
  • 연미복, 짧은 다리, 날지 못하는 새를 펭귄이라고 분류한다.
  • 밤하늘에 반짝이는 사물들을 별이라고 분류한다.

 

사람이라는 분류의 객체(Object) 속성(property) 행위(method)
이호창 나이, 키, 몸무게 등 먹다, 자다, 울다, 걷다 등
박호창 " "
김호창 " "

 

 

# 클래스 vs 객체 = 사람 vs 김종민 (UML 표기)

 

 

  • 위 UML 표기법 만 봐도 객체지향은 직관적인 걸 알 수 있다.
  • 우리가 사물을 인지하고 사고하는 방식에 맞기 때문

 

객체 지향은 인간의 인지 및 사고 방식까지 프로그래밍에 접목하는 인간(개발자) 지향을 실천하고 있는 것이다.

 

반응형

아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.

 

📃 참고도서

 

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

COUPANG

www.coupang.com

 

 

 

# 프로그램이 메모리를 사용하는 방식

코드 실행 영역 데이터 저장 영역

 

 

# 객체지향 프로그램의 메모리 사용 방식

코드 실행 영역 스태틱(Static) 영역
스택(Stack) 영역 힙(Heap)영역

 

 

 

# main() 메서드: 메서드 스택 프레임

 

- main() 메서드는 프로그램이 실행되어 시작되고 끝나는 곳이다.

 

public class Start {
	public static void Main(String[] args) {
		System.out.printIn("Hello OOP!");
	}
}

 

위 코드가 실행 될 때 메모리 변화

스태틱 영역 - 클래스들의 놀이터
스택 영역 - 메서드들의 놀이터 영역 - 객체들의 놀이터

* 책의 저자는 위 메모리 구조가 T자와 같다고 해서 T메모리라고 부른다.

 

 

main() 메서드가 실행 되기 전 JVM에서 수행하는 전처리 작업들

  1. java.lang 패키지를 T 메모리의 스태틱 영역에 배치한다.
  2. import된 패키지를 T 메모리의 스태틱 영역에 배치한다.
  3.  프로그램 상의 모든 클래스를 T 메모리의 스태틱 영역에 배치한다.

 

 

  • main() 메서드가 돌기 위해 스택 프레임(Stack frame)이 스택 영역에 할당
    => 메서드들의 놀이터는 스택(Stack)
  • 2번째 줄의 블록 시작 기호인 여는 중괄호를 만났을 때 main() 메서드의 스택 프레임이 생긴다.
    => 반대로 닫는 중괄호를 만나면 스택 프레임이 소멸된다.

 

 

  • 메서드의 인자 args를 저장할 변수 공간을 스택 프레임의 맨 밑에 확보한다.
    => 메서드 인자(들)의 변수 공간을 할당

  • JRE는 눈에 보이지는 않게 뒤에서 JVM이라고 하는 자바 가상 기계를 부팅하고,
    JVM은 메모리 구조를 만들고 거기에 java.lang패키지 로딩, 각종 클래스 로딩, main() 메서드 스택 프레임 배치,
    변수 공간 배치 등등의 일을 처리
  • System.out.printIn("Hello OOP!") 구문이 실행 되면 T 메모리에는 변화가 없다.
  • 메모리에는 코드 실행 공간은 별도로 있다.
  • System.out.printIn() 구문이 코드 실행 공간에서 실행되면 GPU(그래픽 처리 장치)에 화면 출력을 의뢰한다.
    => 이때 데이터 저장 공간인 T 메모리에는 아무런 변화가 없다.

 

 

 

반응형

+ Recent posts