스프링을 들어가기 전에 체크리스트.
1. Java 코드가 실행되는 과정을 설명할 수 있다.
- JDK에서 내가 친 코드 javac로 컴파일, 바이트 코드로 바꾼 후 JRE로 전송. JRE는 JVM이 원할히 작동할 환경을 제공한다. JVM에서는 클래스 로더 서브시스템 → 런 인바이런먼트(이곳에 매서드 영역:클래스 스택 영역:매서드 힙 영역:인스턴스(new))로 처리한다. 그리고 JIT과 GC는 이 과정에서 JIT:자주 사용되는 로직을 매서드화해서 메모리를 아끼고 GC: 사용되지 않는 변수를 가비지 콜렉터로 없앤다.
2. JVM 구조를 정리할 수 있다.
3. 코드와 메모리를 연관 지어 설명할 수 있다..
- 클래스 로더 서브시스템은 Load, Link, initialize 세 순서로 작동하는데, Load부분에서 바이트에 필요한 메모리를 로드한다. 이 메모리의 사용량이 적으면 적을수록 좋으므로 JIT, GC등이 메모리 할당량을 재조정하여 프로그램을 원할히 돌릴 수 있게 해준다.
4. Scope, Call By Value를 설명할 수 있다.
- Scope는 사용 가능한 범위(ex: 지역변수:매서드 내에서 전역변수: 클래스 내에서), Call By Value : Java에서 변수를 선언하면 Stack 영역에 할당된다. primitive 타입은 Stack 영역에 변수와 함께 저장되며, reference 타입은 Heap 영역에 저장되고 Stack 영역에 있는 변수가 객체의 주소값을 갖고
Java 의 Call by Value, Call by Reference
5. 인터페이스에 대해 설명할 수 있다.
- 자바에서 매서드는 다중 상속이 불가능하다. 따라서 다중상속을 하기 위해 interface라는 기능을 만들었다. 인터페이스는 상수, 추상매서드, Static 매서드, Default 매서드를 포함할 수 있다. 더불어 프론트엔드 개발자와 협업하여 사용하는 일종의 창구이자 툴이다.
6. 함수형 인터페이스와 람다 이해하고 사용할 수 있다.
7. 스트림의 이해와 대표 스트림 익히고 설명할 수 있다.
- 스트림도 함수의 한 종류. for문 등의 사용은 “명령형imperative ”. 스트림은 “선언형 declarative ”. filter, map 등등 중간연산은 N번 가능하고 최종연산(collect, foreach)등은 한번 사용 가능하다.
노마드코더 함수형 코드
8. Optional의 등장 배경과 활용법에 대해 이해하고 설명할 수 있다.
- NPE의 대처로. “결과 없음”을 명확하기 드러내기 위해 메소드의 반환 타입으로 사용되도록 매우 제한적인 경우로 설계됨.
한 주의 소감
객체 지향에 대한 이해를 위해서 어떻게든 발버둥 친 한 주였다. 특강도 많았고, cs에 대한 것도 많이 배워서 그것을 정리하느라 필요한 시간 / 내가 객체지향의 이해를 위해서 구매한 책들(자바의 정석, 스프링 입문을 위한 자바 객체지향의 원리와 이해, 이펙티브 자바 등...)을 다시 확인하면서 스프링 입문 전에 열심히 노력했다. 하지만...정말 절대적 시간이 부족한 것 같다. 나는 아직 부족하다고 느끼는데...ㅎㅎ 벌써 스프링이라니. 내가 할 수 있는 최선을 다해보려고 한다. 특히 자바에 대한 이해는 더 더 더 필요할 것 같다. 스프링 강의를 들으면서도 책의 진도는 매일 정해진 량을 나갈 생각.