자바의 접근제어자(public, protected, private, private-package) 접근제어자란? 객체지향에서는 정보 은닉(data hiding)라는 개념이 있습니다. 사용자가 굳이 알 필요가 없는 정보를 사용자로부터 숨겨야 한다는 개념입니다. 최소한의 정보만으로 사용자가 프로그램을 사용할 수 있다는 장점이 있습니다. 즉, 개발자가 개발을 할 때 최소한의 메서드, 클래스만 알고 개발을 진행할수 있다는 점과 동일할 수 있습니다. 총 4가지의 접근 제어자를 자바에서는 지원해주는데 아래와 같습니다. public protected private-package(default) private 접근을 제어하는것이기 때문에 여기서 중요한건 접근을 어디까지 제어할것인가 입니다. 접근 범위 접근 제어자 같은..
Backend/Java
Junit5의 @Nested를 이용해 테스트 작성해보자 해당 테스트는 Java11 / Gradle / Junit 5.8.2버전을 이용해 작성되었습니다. 🧐 @Nested 알아보기 Java Doc @Nested is used to signal that the annotated class is a nested, non-static test class (i.e., an inner class) that can share setup and state with an instance of its enclosing class. The enclosing class may be a top-level test class or another @Nested test class, and nesting can be arbitrar..
Introduction to Java Bytecode You Didn’t Know You Needed 모든 Java개발자는 언어 생태계에서 JVM 역할에 익숙합니다. 그러나 대부분 Java개발자들은 JVM의 내부동작에 대해서는 이해하지 못합니다. Java 개발자가 되기 위해 해당 지식이 반드시 필요하지 않지만, JVM을 더 잘 이해한다면 더 좋은 코드를 작성하는데 도움이 됩니다. 왜냐하면 작성하는 모든 코드들이 JVM 내부에서 진행되는 프로세스에 어떤 영향을 미치는지 알 수 있기 때문입니다. JVM의 작동 방식을 이해하기 위해 JAVA의 바이트코드가 무엇인지 이해해야 합니다. 따라서 이 글은 Java 바이트코드의 모든 내용과 프로그램을 마지막으로 실행할 때 JVM에 미치는 영향에 대해 설명하도록 하겠습니..
Immutability in Java(자바의 불변성) 불변 클래스란 한번 초기화 되면 상태를 변경할 수 없는 클래스 입니다. 즉, 불변 객체의 인스턴스를 참조하고 있다면 해당 인스턴스에 대한 변경이 일어나면 새로운 객체를 생성해 새로운 메모리 공간으로 가리키도록 참조를 변경합니다. 불변 클래스는 아래와 같은 규칙을 따라야 합니다. 클래스는 확장이 불가능 하도록 final 키워드를 붙여야 합니다. 자식 클래스를 인스턴스화를 할 수 있으므로 원하지 않은 가변적인 구현을 할 수도 있기 때문입니다. 모든 속성 필드는 캡슐화 원칙에 따라 private 이어야 합니다. 불변 클래스 인스턴스를 올바르게 생성하기 위해 클래스 상태를 초기에 세탕할 수 있도록 매개변수가 있는 생성자가 있어야 합니다. 클래스 속성 변경 가..
FileReader가 File을 찾아올때 경로가 어떻게 될까? 최근 FileReader 클래스를 사용하면 경로가 어떻게 되는지에 대한 질문이 있어 직접 테스트를 해봤다. 과연 FileReader는 어디 경로를 기준으로 가져오는걸까? FileReader fr = new FileReader(filepath); FileRader 내부 살펴보기 위의 코드에서 FileRader에서 파일을 어떻게 찾아와서 읽는지 알아보려면 내부를 살펴봐야 할것 같습니다. 실제 우리가 부르는 생성자만 살펴보면 아래와 같습니다. /** * Creates a new {@code FileReader}, given the name of the file to read, * using the platform's * {@linkplain jav..
From Java 8 to Java15 in Ten Minutes(Java8부터 Java15까지 10분안에 보기) 2020년 가을에 나온 Java15까지 각 Java8부터 Java15까지 최소한 하나의 주요 개선사항을 작성해보도록 하겠습니다. Java는 람다, 함수형인터페이스, var 를 통한 타입 추론, 간단한 생성자와 함께 불변 컬렉션, 멀티라인문자열들을 지원합니다. 또한, 데이터 클래스(record) 그리고 sealed classes 와 같은 실험적인 기능이 있습니다. 마지막으로 빠른 실험을 통해 높은 가치를 제공하는 Java REPL에 대해 이야기 하겠습니다. 함수형 프로그래밍(Functional Programming) - Java8 Java8에서는 함수형 프로그래밍과 람다가 추가되었습니다. 함수..
String vs StringBuilder vs StringBuffer String immutable(불변)의 특징을 가진다. 객체를 생성한 후에 상태를 변경할수 없습니다. JVM 메모리 중에 힙(Heap) 영역에 생성된다. 불변이기 때문에 멀티쓰레드 환경에서 동기화를 신경 쓸 필요가 없다. 리터럴("")로 선언하면 특수하게 String Constantpool이라는 공간에 생성되며 이 메모리 공간은 절대 변하지 않는다. 즉, 문자열 값은 절대 변하지 않은다. 즉, + 연산이나, concat 메서드를 사용해 문자열을 변환해도 메모리 공간내의 값이 변하는 것이 아니라 String Constant pool이라는 공간 메모리 안에 새로운 메모리를 할당 받아 새로운 객체를 생성한다. 이렇게 연산을 할 떄마다 새로..
Overloading(오버로딩) VS Overriding(오버라이딩) 서론 Java 개발자로 면접 볼 시 문제로 많이 나오는 개념으로써, 자주 사용하지만 이름과 개념에 대해 정확한 정리가 없어 이야기 하기가 힘들때가 있어서 이번 기회에 정리를 해보려고 합니다. 이 두개는 다형성을 지원하기 위해 나왔습니다. Overloading(오버로딩) 함수 오버로드(영어: Function overloading)는 다양한 에이다(Ada), C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다. (C언어는 지원하지 않는다) - 위키 백과 간단한 정리 같은 이름의 메소드를 여..
객체지향 설계를 위한 SOLID 원칙 참고자료 객체지향 개발 5대 원리: SOLID 객체지향 설계의 5가지 원칙 S.O.L.I.D SRP(Single Responsibility Principle - 단일 책임 원칙) 객체는 오직 하나의 책임을 가져야 한다. 객체는 오직 하나의 변경의 이유만을 가져야 한다. 여러 원인에 의한 변경(Divergent Change) 여분의 클래스를 통해 혼재되어 있는 각 책임을 각각의 개별 클래스로 분할하여 클래스 당 하나의 책임만을 맡도록 하는 것이 중요하다. 중요한 점은 책임만 분리하는 것이 아니라, 두 클래스간의 관계의 복잡도를 줄이도록 설계하는 것도 중요하다. 만약 클래스들이 유사하고 비슷한 책임을 중복해서 갖고 있다면 부모 클래스를 만들어 상속받을 수 있도록 하는것이..
DTO vs VO DTO == VO (?) 많은 글들이 DTO와 VO는 같은 것으로 적어놓은 글들이 많습니다. 그러나 명확하게 DTO와 VO는 다른 것입니다. 아래 DTO와 VO에 대해 정리하면서 둘의 차이점을 명확하게 알아보도록 하겠습니다. DTO(Data Transfer Obejct) DTO란? 레이어 간 데이터를 전달하는 객체입니다. 예를 들면 시험을 볼때 ORM 카드를 이용해 정답을 입력하여 제출하게 되는데 즉, 시험지와 채점도구 사이의 정답(데이터)를 전달하기 위해 ORM 카드를 사용한다고 생각했을때 ORM 카드를 DTO라고 할 수 있습니다. 특징 데이터 접근 메서드를 가지게 됩니다. 직렬화 등 데이터 표현을 위한 기능을 가질수는 있습니다. 또한 클라이언트에서의 값에 대한 Validation 체..