Java 20

람다식과 표준 함수형 인터페이스 (1)

람다식이란? 람다식은 자바8에서 함수형 프로그래밍을 도입하면서 지원되기 시작한 문법이다. 기본적으로 람다식은 익명 구현객체를 만드는 새로운 방식이다. 기존의 방식대로 Runnable 인터페이스의 익명 구현 객체를 생성하는 코드는 다음과 같다. Runnable runnable = new Runnable(){ public void run(){ ... } } 람다식을 이용하면 아래처럼 더 짧고 간결하게 나타낼 수 있다. Runnable runnable = () -> { ... } 람다식은 런타임 시에 어떤 인터페이스를 구현하는 것인지 결정된다. 즉, 람다식이 대입되는 타입이 무었인지에 따라 구현되는 인터페이스가 결정된다. 위 코드는 Runnable 에 대입되므로 람다식은 런타임에 Runnable의 익명 구현 ..

Java/기초문법 2022.03.07

Enum vs static final

개발을 하다보면 상수를 사용할 때가 있다. 필자는 최근 신년목표세우는 사이트를 재미삼아 만드는 중인데, 새 버전에선 신년목표뿐 아니라 1주일, 1달 등 더 세분화한 목표설정도 가능하게끔 확장하는 작업을 실시하고 있다. 이 과정에서 DB에 해당 목표의 기간이 얼마인지를 저장할 필요가 생기는데, 설정 가능한 기간은 미리 정해져있으므로 미리 정해진 기간 목록을 따로 테이블로 빼고, 기존의 목표를 저장하는 테이블에서 참조하도록 DB설계를 수정했다. DB가 수정되면 Java의 DTO 객체도 수정되어야 하는데 이 과정에서 Enum 에 대한 의문이 들어 찾아본 것을 정리해본다. 위에서 잠깐 언급한 사이트 내부에서 사용한 DTO들을 예로 들자. 아래 코드는 static final String을 이용한 코드이다. pac..

[Servlet] 기본부터 다시 보자

최근, Spring을 이용한 웹 개발을 공부하면서, 기존의 Servlet, JSP에 대한 이해가 부족하다는 것을 느꼈다. 이에 다시 기본으로 돌아가 Servlet과 이것이 동작하는 방법에 대해 공부해보았다. Servlet Servlet 이란? 쉽게 말해 Servlet은 자바를 이용해서 동적으로 웹페이지를 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 구체적으로 Java EE에서 자바로 동적인 웹페이지를 생성하는 사양을 Servlet이라 정의했고, 여기서 정의한 Servlet API 를 구현한 것을 Servlet 이라고 부른다. 웹에서 동작하기 위한 HTTP 통신등의 기반기술은 모두 컨테이너에 구현되어있고, Servlet에는 사용자의 요청을 처리하는 로직이 담겨있게 된다. Servlet 컨테이너 Ser..

Java 2021.11.25

[JVM] JVM의 구조 - 3. 힙 영역과 GC

2021.11.11 - [Java] - [JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA) [JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA) 2021.11.10 - [Java] - [JVM] JVM의 구조 - 1. 클래스 로더 [JVM] JVM의 구조 - 1. 클래스 로더 JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐.. blog.robinjoon.space 자바의 힙 영역은 객체가 생성되고 존재하는 영역이다. 이런 객체들은 원시 타입의 데이터보다 훨씬 더 용량이 크기 때문에, 사용하지 않는 객체는 메모리에서 삭제되어야 한다. 아래 코드를 보자. for( int i = 0;i

Java/JVM 2021.11.12

[JVM] JVM의 구조 - 2. 런타임 데이터 영역(RDA)

2021.11.10 - [Java] - [JVM] JVM의 구조 - 1. 클래스 로더 [JVM] JVM의 구조 - 1. 클래스 로더 JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐려졌지만, Java가 WORA(Write Once Run Anywhere) 를 구현하기 위해 물리적인 머신이 아닌 가상머. blog.robinjoon.space JVM의 런타임 데이터 영역은 크게 PC 레지스터(PC Register), JVM 스택(JVM Stack), 네이티브 메서드 스택(Native Method Stack), 힙(Heap), 메서드 영역(Method Area), 런타임 상수 풀(Runtime Constant Pool) 6가지..

Java/JVM 2021.11.11

[JVM] JVM의 구조 - 1. 클래스 로더

JVM의 구조 JVM은 Java Virtual Machine 의 약자로, 자바로 작성한 코드를 실행하는 가상머신이다. 현재는 많이 흐려졌지만, Java가 WORA(Write Once Run Anywhere) 를 구현하기 위해 물리적인 머신이 아닌 가상머신에서 동작하도록 구현되었다. Java로 작성한 코드는 전체적으로 아래 그림과 같은 과정을 통해 실행된다. 자바는 정적 로딩이 아니라 동적로딩을 한다. 즉, 컴파일타임이 아니라 실행타임에 클래스를 디스크에서 읽어와 메모리에 로드한다. 이런 로딩 작업을 하는 JVM의 구성요소를 클래스 로더라고 부른다. 클래스 로더는 3가지 원칙을 가지고있다. 클래스로더의 3원칙 1. 계층구조와 위임. 자바의 클래스 로더들은 서로 부모 - 자식관계를 이루어 계층을 이룬다. 또..

Java/JVM 2021.11.10

[Java 기본 문법] 7. 상속과 다형성

2021.08.16 - [Java] - [Java 기본 문법] 6. 접근제한자와 캡슐화 [Java 기본 문법] 6. 접근제한자와 캡슐화 2021.08.14 - [Java] - [Java 기본 문법] 5. 객체와 클래스 [Java 기본 문법] 5. 객체와 클래스 2021.08.14 - [Java] - [자바 기본 문법] 4. 참조타입 [자바 기본 문법] 4. 참조타입 2021.08.13 - [Java] - [Java.. blog.robinjoon.space 상속은 자바에서 객체지향의 핵심중 하나인 다형성을 구현하는 매커니즘이다. 그만큼 아주 중요한 내용이기 때문에 반드시 숙지해야한다. 상속 현실에서 상속은 부모가 자식에게 물려주는 것을 의미한다. 자식은 상속받은것을 원래부터 자기것인냥 자연스럽게 사용할 수..

Java/기초문법 2021.08.17

[Java 기본 문법] 6. 접근제한자와 캡슐화

2021.08.14 - [Java] - [Java 기본 문법] 5. 객체와 클래스 [Java 기본 문법] 5. 객체와 클래스 2021.08.14 - [Java] - [자바 기본 문법] 4. 참조타입 [자바 기본 문법] 4. 참조타입 2021.08.13 - [Java] - [Java 기본 문법] 1. 변수와 타입 2021.08.13 - [Java] - [Java 기본문법] 2. 연산자 2021.08.13 - [Ja.. blog.robinjoon.space 이전 포스팅에서 접근제한자 라는걸 언급했다. 이번 포스팅에선 접근제한자가 무었이고 왜 사용하는지 이것을 통해 캡슐화를 어떻게 하는지 알아보자. 접근제한자 접근제한자란, 클래스, 필드, 매서드에 어떤 객체가 접근이 가능한지 설정하는 키워드다. 접근제한자는 ..

Java/기초문법 2021.08.16

[Java 기본 문법] 5. 객체와 클래스

2021.08.14 - [Java] - [자바 기본 문법] 4. 참조타입 [자바 기본 문법] 4. 참조타입 2021.08.13 - [Java] - [Java 기본 문법] 1. 변수와 타입 2021.08.13 - [Java] - [Java 기본문법] 2. 연산자 2021.08.13 - [Java] - [Java 기본 문법] 3. 제어문 1번 포스팅에서 자바의 타입에는 기본타입과 참조.. blog.robinjoon.space 본격적으로 객체지향 프로그래밍에 대해 알아보고, 자바에서 이를 구현한 문법과 구조를 알아볼 것이다. 객체지향 프로그래밍(OOP)이란? 객체지향 프로그램이란, 프로그램을 구성하는 부품인 객체를 먼저 만들고, 이를 조합해 원하는 동작을 하는 프로그램을 작성하는 프로그래밍 기법이다. 여기서 ..

Java/기초문법 2021.08.14

[Java 기본 문법] 4. 참조타입

2021.08.13 - [Java] - [Java 기본 문법] 1. 변수와 타입 2021.08.13 - [Java] - [Java 기본문법] 2. 연산자 2021.08.13 - [Java] - [Java 기본 문법] 3. 제어문 1번 포스팅에서 자바의 타입에는 기본타입과 참조타입이 있다고 했다. 이제 참조타입을 설명할 때다. 참조타입이란? 기본타입의 변수는 그 공간에 기본타입의 값을 직접 저장한다. 그러나, 참조타입의 변수는 값이 저장된 공간의 주소를 값으로 가지고있다. 그리고 그 공간에는 객체가 저장되어있다. C언어의 포인터와 비슷한 개념이다. 다만, 포인터와 다르게 프로그래머입장에서 값을 읽거나 쓸 때 변수가 참조타입인지 기본타입인지에 따라 방식이 같다. 구체적으로, 변수는 스택영역에 할당된다. 기본..

Java/기초문법 2021.08.14