위키북스 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 읽고 개인적으로 정리한 글입니다.
01 사람을 사랑한 기술
기계어에서 객체 지향 프로그래밍 언어로
언어 |
특징 |
기계어 |
목적파일 = 소스 그 자체 |
어셈블리어 |
인간 언어로 작성 (기종별 어셈블러로 소스를 번역), 기종마다 소스 하나씩 |
C |
하나의 소스 (One Source Multi Object Use Anywhere), 기종별 컴파일러 필요 |
C++ |
객체지향 도입 (객체지향 지원 언어) |
자바 |
한번의 컴파일(Write Once(One Source) (One Object) Use Anywhere), 기종별 JRE 필요, 포인터 X |
CBD와 SOA가 어려운 이유
- CBD(Component Based Development) 컴포넌트 기반 개발
- SOA(Service Oriented Architecture) 서비스 중심(지향) 구조
- 이들 개념은 이전에는 존재하지 않았던 것이 아니라, 누군가 그렇게 이름 붙인 것
- 개념은 있지만 그것을 대표하는 제품이 없거나 사용해 본 제품이 없어서 개념을 설명할 메타포가 없기 때문
작가가 생각하는 스프링 프레임워크의 개념
OOP 프레임워크 with IoC, DI, AOP, PSA, WEB, ORM, OXM, Security, Test,
iBatis, Hibernate, ...
- 스프링 프레임워크는 규모가 방대하지만 일관성 있는 방식으로 방대해졌다
- 스프링 프레임워크의 근원적 요소: IoC/DI, AOP, PSA
02 자바와 절차적/구조적 프로그래밍
자바 프로그램의 개발과 구동
현실세계 |
자바 세계 |
소프트웨어 개발 도구 |
JDK - 자바 개발 도구 |
JVM용 소프트웨어 개발 도구, 자바 소스 컴파일러 포함 |
운영체제 |
JRE - 자바 실행 환경 |
JVM용 OS, 자바 프로그램 실행기 포함 |
하드웨어 - 물리적 컴퓨터 |
JVM - 자바 가상 기계 |
가상의 컴퓨터 |
- 객체 지향 프로그램의 메모리 사용 방식
- 힙 영역: 객체가 상주하는 구역
- 스태틱 영역: 클래스가 상주하는 구역
- 스택 영역: 메서드가 상주하는 영역
자바에 존재하는 절차적/구조적 프로그래밍의 유산
- goto는 어디로 갔을까?
- goto를 사용하면 프로그램의 실행 순서가 이해하기 복잡히지기 때문
- 실행 순서를 따라가면서 프로그램을 이해하는 것은 쉽지 않다
- 대신 구조적 프로그래밍 → 함수를 사용!
- 중복 코드를 모아서 관리
- 논리를 함수 단위로 분리하여 이해하기 쉬움
- +) 전역 변수보다 지역 변수를 사용
- 객체 지향 언어에서 절차적/구조적 프로그래밍의 유산은 메서드에서 확인할 수 있다.
- 함수 vs 메서드
- 큰 차이는 없다
- 차이점
- 함수는 클래스나 객체와 아무 관계가 없다
- 메서드는 반드시 클래스 정의 안에 존재해야 한다.
자바 프로그램의 실행
- main()
- JRE: 프로그램 안에 main 메서드가 있는지 확인
- → main() 확인 시 프로그램 실행을 위해 JVM을 부팅
- JVM: 목적 파일을 받아 목적 파일을 실행
- 전처리 - 필요한 패키지와 코드를 static 영역에 배치
- java.lang 패키지
- 개발자가 작성한 모든 클래스
- import 패키지
- 메서드 실행을 위해 스택 프레임을 스택 영역에 할당
- 여는 중괄호를 만날 때마다(class 정의 제외) 스택 프레임이 하나씩 생김
- 메서드 실행에 필요한 변수를 위한 공간을 스택 프레임에 할당
멀티 스레드/멀티 프로세스
- 멀티 스레드의 T메모리 모델: 스택 영역을 스레드 개수만큼 분할해서 사용
- 하나의 T메모리 안에서 스택 영역만 분할해서 사용
- 하나의 스레드에서 다른 스레드의 스택 영역에는 접근할 수 없지만, 스태틱 영역과 힙 영역은 공유해서 사용
- 멀티 프로세스대비 메모리를 적게 사용할 수 있다
💡 서블릿은 요청당 프로세스가 아닌 요청당 스레드를 생성한다
→ 요청당 스레드(Servlet)가 요청당 프로세스(CGI)보다 더 효율적인 이유
-
- 쓰기 가능한 전역 변수 사용 시 스레드 안전성이 깨진다
- 락으로 보완할 수 있지만 멀티 스레드의 장점이 감소
- 멀티 프로세스의 T메모리 모데리: 다수의 T메모리를 갖는 구조
- 각자 고유의 공간이므로 서로 참조할 수 없음
- 안전하지만 메모리 사용량이 크다