Java 8

[java 8] 함수형 인터페이스와 람다 표현식 소개

함수형 인터페이스 추상 메소드를 하나만 가지고 있는 인터페이스입니다. 함수형 인터페이스를 정의하기 위해 @FunctionalInterface 애노테이션을 사용할 수 있습니다. 이 애노테이션은 자바에서 제공해줍니다. java 8부터 인터페이스이지만 메서드안에 구현체가 있을 수 있고 default 메서드를 추가할 수도 있게 변경됐습니다. - 함수형 인터페이스 public interface RunSomething { void doIt(); //구현부가 있는 메서드 static void printName(){ System.out.println("dayeon"); } //디폴트 메서드 default void printAge(){ System.out.println("20"); } } RunSomething 인터페이..

Java 2021.09.06

[Java] 컴파일러 vs 인터프리터 vs JIT compiler

자바를 공부하다보면 JIT compiler 에 대해 들어보셨을거에요. 그냥 컴파일은 뭐고 인터프리터는 뭘까요? 이것들이 무엇인지! 그리고 JIT 와는 어떻게 다른지 알아보겠습니다. 개발자가 작성하는 코드는 고레벨 언어라고 합니다. 컴퓨터는 이해하지 못하고 사람은 쉽게 이해할 수 있는 언어이죠. 이를 컴퓨터가 이해하기 위해서는 저레벨 언어인 기계어로 변환이 되어야 합니다. 이를 위한 방법에는 대표적으로 두 가지가 있는데 하나는 컴파일 방식, 다른 하나는 인터프리터 방식입니다. 컴파일 방식 먼저 컴파일이란 특정 프로그래밍 언어로 된 원래 소스 파일(원시코드)을 다른 프로그래밍 언어(목적코드)로 옮기는 언어 번역 프로그램입니다. 원시코드에서 목적코드로 옮기는 과정을 컴파일 한다고 말합니다. 작성된 소스코드를 ..

Java 2021.05.31

[Java] JVM 구조와 원리

JVM은 Java Virtual MAchine의 약자 입니다. OS와 자바 프로그램 사이에서 프로그램이 실행되는데 필수적인 환경을 제공해 줍니다. JVM은 크게 Garbage collector, Execution Engine, Class Loader, Runtime Data Area 4개의 영역으로 구성되어 있습니다. 또 Runtime Data는 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 구성되어 있습니다. JVM의 대표적 기능은 다음과 같습니다. 1. 운영체제에 상관없이 어디서든 자바 코드가 실행될 수 있게 한다. 2. GC(Garbage Collectoin) 기능을 제공한다. JVM 구조 Java Compiler Ja..

Java 2021.05.23

[Java] Static 변수, static 메소드

static(정적)은 '고정된'이라는 의미를 가지고 있습니다. 변수나 메소드 앞에 static 키워드를 붙여서 static 변수나 static 메소드를 만들 수 있습니다. 이 둘을 정적 멤버 또는 클래스 멤버라고도 합니다. 정적 멤버는 객체에 속한 것이 아니고 클래스에 속합니다. 따라서 객체 간에 정적 멤버를 공유할 수 있습니다. 메모리 사용을 최대한 늦추기 위해 클래스가 처음으로 사용될 때 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재합니다. 처음으로 사용될 때라는 것은 다음 세 가지 중 하나입니다. 클래스의 정적 속성(정적 변수, static{} 블록)을 사용할 때 클래스의 정적 메서드를 사용할 때 클래스의 인스턴스를 최초로 만들 때 이 때, 클래스별로 정적 멤버가 관리됩니다. 따라서 클..

Java 2021.05.23

[Java] String, StringBuffer, StringBuilder

자바에는 문자열을 저장하고 관리하는 클래스 중에 String, StringBuffer, StringBuilder가 있습니다. 이 클래스들의 차이점을 알아보겠습니다. String (immutable) vs StringBuffer (mutable), StringBuilder (mutable) String 객체는 한 번 생성되면 그 인스턴스의 메모리 공간은 절대 변하지 않아요(immutable) 반대로 StringBuffer와 StringBuilder는 가변성을 가집니다. String str = "I love" str += "you" str 변수가 가르키는 "I love" 문자열에 "you" 문자열이 더해진 것이라고 생각 할 수 있지만 str 변수는 "I love you"라는 새로운 메모리 영역을 가리키게 변..

Java 2021.04.22

[Java] JavaAgent

JavaAgent 란? JVM 에서 동작하는 Java 어플리케이션으로 JVM의 다양한 이벤트를 전달받거나 바이트코드 제어 등을 특정 API를 통하여 수행할 수 있습니다. 또한 JavaAgent는 JDK1.5부터 제공하는 자바 instrumentation API로 소스코드의 변경없이 런타임 중에 자바 바이트 코드를 변조할 수 있게 하는 강력한 기능을 제공합니다. 자바 코드는 결국 바이트 코드로 변환이 된 후에 JVM이 바이트 코드를 읽어 실행이 됩니다. 즉 최종적으로 바이트 코드 내용으로 실행이 되기 때문에 바이트 코드를 조작한다면, 개발자가 최초로 작성한 코드와 다른 결과가 나올 수 있습니다. Java agent가 클래스파일을 직접 바꾸는 것이 아닌, 실행 후 JVM에 클래스로딩이 이루어지는 시점에 동작..

Java 2021.01.17

[Java] Garbage Collector

Java에서는 new키워드를 사용하여 동적으로 객체를 생성하면 heap영역에 저장됩니다. 새로 생성한 메모리의 해제는 JVM의 Garbage Collector(GC)가 수행하며 GC의 동작원리에 대해서 알아보겠습니다. Garbage Collector 역할 Java의 GC는 다음의 역할을 수행한다고 볼 수 있습니다. 힙(heap)내의 객체 중에서 참조할 수 없는 가비지를 찾는다. 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. 가비지 컬렉션 과정 GC는 아래 두가지 전제 조건 하에 발생합니다. 대부분의 객체는 금방 접근 불가능 상태가된다. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다. 위 두가지 가설을 weak generational hypothesis 이론이라고 합니다. GC가 수행되는 물..

Java 2020.05.11