현재 수준에서 Pobi가 추천해준 몇 개의 필독서 책이 있습니다. 그 중 하나로 초보자에게 적합한 책이라고 하더라구요. 그래서 주위 코드스쿼드 멤버들과 같이 읽기로 했습니다. 현재 수준에서 4장까지 읽는 것을 추천하셔서 하루에 조금씩이라도 읽어보려고 합니다. 그리고 제가 모르고 있던 부분, 도움되는 부분, 인상깊은 부분들을 시간이 좀 걸리더라도 블로그에 조금씩 정리를 해나갈 계획입니다!!
02. 자바와 절차적/구조적 프로그래밍
객체 지향을 모르고 스프링을 안다는 것은 어불성설이다. 스프링은 객체 지향의 위에 굳건히 서 있기 때문이다.1
'자바 기본서에서 배운 개념들만 익히고 나서 바로 스프링을 배우면 되겠구나'라는 인식이 예전에 있었습니다. 하지만 이전에 제가 이해했다고 생각했던 객체는 정말 껍대기에 불과했던 것 같습니다. 만약 그 상태에서 스프링을 배웠다면 스프링 또한 제대로 이해못했을 가능성이 높았겠네요.
보통 자바 기본서 맨 처음에 보면 자바 소스파일이 어떻게 구동되는지 설명하고 있죠. 다시 한번 용어부터 보겠습니다.
JDK : Java Development Kit / 자바 개발 도구
JRE : Java Runtime Environmnet / 자바 실행 환경
JVM : Java Virtual Machine / 자바 가상 기계
먼저 자바 소스 파일에서 JDK에 있는 자바 소스 컴파일러에 의해 목적파일(.class)2로 바뀝니다. 이러한 목적파일이 JRE 내에서 JVM에 의해 작동이 되는 것입니다. JDK, JRE가 각 운영체제별로 있는데 그 이유는 하나의 소스파일 또는 목적파일이 구동이 될 때 운영체제에 종속되지 않기 위함입니다.
객체 지향 프로그램에서 이렇게 메모리가 사용된다고 합니다. 먼저 (코드 실행 영역, 데이터 저장 영역)이 나뉘고, 또 데이터 저장 영역은 (static 영역, stack 영역, heap 영역)3 으로 나뉘네요.
절차적/구조적 프로그래밍에서 함수라 불렀는데 객체 지향에서는 좀 다르게 불러야 하지 않을까? 그래서 메서드라고 불렀다고 한다4
굳이 자체점을 꼽는다면 함수는 클래스나 객체와 아무런 관계가 없지만 메서드는 관계가 있는 점이라고 합니다. 메서드가 객체나 클래스 내에서 역할을 생각한다면 이렇게 따로 부르는게 수긍이 가네요.
이제부터 코드를 보면서 T메모리에 어떤 변화가 생길지 관찰하게 될 것입니다. 각 영역 옆에 저자는 클래스, 메서드, 객체들의 놀이터라고 저자는 표현을 했는데요. 말 그대로 저 3개의 개념들이 담기게 되는 공간이기 때문입니다. 아래에서 살펴보게 될 것입니다.
먼저 첫번째는 Start1
이라는 클래스입니다. main() 메서드에 출력하는 부분으로 구성되어 아주 간단하죠.
public class Start1 {
public static void main(String[] args) {
System.out.println("Hello OOP!!!");
}
}
이 코드에 대해 T메모리는 아래와 같이 나타낼 수 있습니다.
간단하게 중요한 부분만 정리하면 다음과 같습니다.
전처리 과정
- JRE는 프로그램 안에서 main() 메서드를 찾습니다. 찾으면 JVM 전원을 넣어 부팅을 하고 목적 파일을 실행합니다.
- JVM은 모든 자바 프로그램이 반드시 포함하는
java.lang
패키지와 개발자가 작성한 클래스, import 패키지를 Static영역에 가져다 놓습니다.
main() 메서드의 중괄호가 열리면 그 때 Stack영역에 아래부터 차곡차곡 쌓인다. 물론 메서드 내 지역변수, 매개변수에 있으면 그 변수 공간도 할당됩니다.
main() 메서드가 끝나면 JRE는 JVM을 종료하고 JRE 자체도 메모리에서 사라집니다.
두번째 클래스는 Start2
라는 클래스입니다.
public class Start2 {
public static void main(String[] args) {
int i;
i = 10;
double d = 20;
}
}
T메모리 구성을 바로 살펴보겠습니다.
- Stack영역의 main() 안에 지역변수가 할당되어 아래로부터 하나씩 쌓였습니다.
- 이 때 지역변수가 선언된 것을 볼 필요가 있는데요.
double d = 20;
이 하나의 명령문인 것 같지만i
와 마찬가지로 먼저double
가 먼저 선언되고 쓰레기 값이 담겨져 있다가 이후에20
으로 초기화 된 것입니다.
오늘은 여기까지 정리해보려고 합니다. 참 시작이 힘들었네요. 책을 읽기 전까지, 그리고 코드를 입력해보기 전까지 왜 이렇게 긴 시간이 필요했던 건지.. 내일은 좀 더 쉽게 손이 잡혔으면 합니다.
'Book > programming' 카테고리의 다른 글
스프링 입문을 위한 자바 객체지향의 원리와 이해6 (2) | 2018.10.27 |
---|---|
스프링 입문을 위한 자바 객체지향의 원리와 이해5 (0) | 2018.10.21 |
스프링 입문을 위한 자바 객체지향의 원리와 이해4 (0) | 2018.10.18 |
스프링 입문을 위한 자바 객체지향의 원리와 이해3 (0) | 2018.10.18 |
스프링 입문을 위한 자바 객체지향의 원리와 이해2 (0) | 2018.10.14 |