목차 배경 자바 기본 개념을 공부하던 중에 Java 9 부터 제공되는 모듈에 대한 소개가 인상깊어 기록해두었다. 실무에서 사용되는 프로젝트를 보면 규모가 커지면서 협업과 유지보수에 어려움을 겪게되는 경우가 많은데, 이러한 상황에서 프로젝트를 모듈화하여 구성한다면 협업과 유지보수를 쉽게 하고 더 나아가 모듈을 통한 재사용성도 향상시킬 수 있다는 생각이 들어 많은 도움이 될 것 같아 블로그에 추가로 작성하였다. 모듈 들어가기에 앞서, 모듈에 대해 간략하게 먼저 작성하는게 좋을 것 같다. 모듈은 java 9 부터 지원하는 기능이며 패키지 관리 기능까지 포함된 라이브러리이다. 일반적인 라이브러리는 외부 프로그램에서 라이브러리 내부에 포함된 모든 패키지에 접근할 수 있지만, 모듈은 일부 패키지를 은닉하여 접근할 ..
목차 배경 최근 Java 언어에 대한 기본기가 부족하다고 생각해서 기본서를 다시 읽어보며 그 개념을 학습하는 중인데, (이전글 참고) 이번에는 그 중 추상 클래스와 인터페이스의 개념 그리고 차이점에 대해서 살펴보고 정리한 내용을 공유하였다. 실제로 신입 개발자 면접에서 단골 질문으로도 나오는 개념임에도 불구하고 기본 개념을 다시 훑어보고 고민하다보니 그동안 나는 이 두 개념과 그 차이점에 대해 잘못 이해했던 부분이 있었던 것 같고, 실제로 이러한 오해들로 정리된 글도 많이 봐왔던 것 같아 이번 기회에 다시 정리해보고자 한다. 내가 잘못 이해했던 부분과 추상 클래스와 인터페이스의 차이점에 대해 설명하기에 앞서, 두 개념에 대해 간략하게 설명하고 넘어가는게 좋을 것 같다. 추상 클래스 추상화된 클래스라는 의..
목차 클래스 로더(class loader)클래스를 로딩하는 기능을 담당한다. 클래스 로더는 java 파일을 class 파일로 java 컴파일러가 컴파일하고 나면, 이를 수행할 수 있게 번역하고 가공해 준다.다시 말해서 .class 파일을 읽고 → 올바른 명세인지 확인 → 메모리 할당 → 필요한 변수들을 초기화 과정을 진행하여 JVM에서 클래스들을 실행하기 위한 작업을 진행하고 Java 애플리케이션이 실행되는 역할을 한다. 클래스 로더의 역할클래스 로딩 : 클래스 파일을 로드하여 메서드 영역에 클래스의 정보를 저장한다. 이 때, 메서드 영역에 저장되는 클래스의 정보는 클래스의 바이트 코드, 메서드, 변수, 메타데이터등이 포함된다.중복 로딩 방지 : 클래스 로더는 중복 로딩을 방지하기 위해 이미 로딩된 클래..
목차 배경Java의 동작원리와 문법을 제대로 깊게 공부해본 적이 없어 이번 기회에 다시 학습하는 중인데 그 중 자바 실행 환경인 JVM과 기본적인 메모리 구조는 공유해두면 많은 도움이 될 것 같아 블로그에 별도로 기록해두었다.JVM(Java Virtual Machine)자바 프로그램 실행환경을 만들어 주는 소프트웨어 자바 코드(.java)를 컴파일하여 .class 바이트 코드로 만들면, 이 코드를 JVM 환경에서 실행 JVM 구조메모리 주소상 위치 : Low address(0x0000000) ~ High address(0xFFFFFFFF) Heap 영역은 낮은(Low) 메모리 주소에서 높은(High) 메모리 주소로 할당받으며, Stack 영역은 그 반대이다.JVM Runtime Data Areajava ..
목차 배경 최근 코드리뷰를 받는 중에 '빌더 패턴의 단점이 딱 드러나는 케이스인 것 같아요' 라는 의견을 받았다. 사실 Builder 패턴으로 객체를 생성해야하는 이유와 그 장점에 대해서는 다양한 블로그 포스트들과 예시 코드를 통해 자주 접해서 익히 잘 알고있었고 습관적으로 객체 생성시 필요할때 Builder 패턴을 따르고 있음에도 (부끄럽지만) 그 단점과 사용시 유의사항에 대해서는 평소 생각해보지 못했다. 이러한 이유를 계기로 이번 기회에 관련 내용을 스스로 정리하고 공유해두면 좋을 것 같아 글로써 정리해두었다. 내용 Builder 패턴으로 객체 생성시 유의사항에 대해 설명하기 전에, 먼저 일반적인 생성자를 통한 객체 생성과 setter를 통한 객체 생성과 비교해보며 Builder로 객체를 생성해야하는..