전체 글 46

IOC 컨테이너 와 DI ( Dependency Injection)

Spring Framework IOC 컨테이너와 DI ( Dependency Injection ) 1. IOC ( Inversion of Control ) 의 이해 1-1 IOC의 개념 IOC ( 제어권의 역전 ) 이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다. - 컴퓨넌트 의존관계 결정 ( Component dependency resolution ), 설정 ( configuration ) 및 생명주기 ( Lifecycle ) 를 해결하기 위한 디자인 패턴 1-2 IOC 의 컨테이너 스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있음, 즉 IOC 컨테이너 기능을 제공한다. - IOC 컨테이너는 객체의 생성을 책임지고, 의..

간단용어 2021.03.03

Immutable Object (불변객체)

Immutable Object 란 ? 객체 지향 프로그래밍에 있어서 불변객체 (immutable Object ) 는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 반대 개념으로는 가변(mutable) 객체로 생성 후에는 상태를 변경할 수 있다. 객체 전체가 불변인 것도 있고, C++에서 const 데이터 멤버들 사용하는 경우와 같이 일부 속성만 불변인 것도 있다. 또, 경우에 따라서는 내부에서 사용하는 속성이 변화해도 외부에서 그 객체의 상태가 변하지 않은 것 처럼 보인다면 불변 객체로 보기도 한다. 예를 들어, 비용이 큰 계산의 결과를 캐시하기 위해 메모이제이션 ( Memoization ) 을 이용하더라도 그 객체는 여전히 불변하다고 볼 수 있다. 불변 객체의 초기 상태는 대개 생성 시에 결정되지만..

간단용어 2021.02.28

REST ful

RESTful 이란 RESTful 은 일반적으로 REST 라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. 'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있다. RESTful 은 REST 를 REST 답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다. 즉, REST 원리를 따르는 시스템은 REST ful 이란 용어로 지칭된다. RESTful 목적 이해하기 쉽고 사용하기 쉬운 REST API 를 만드는 것 RESTful 한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성은이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다. R..

간단용어 2021.02.28

1주차 : JDK 와 JRE 차이

JDK 와 JRE 차이 1. JDK : Java Development Kit ( 자바 개발 도구 ) JRE : Java Runtime Environment ( 자바 실행 환경 ) 즉, 자바 언어로 프로그램을 개발하기 위해서는 JDK 를 설치해야 하고 자바 언어로 작성된 프로그램을 실행하기 위해서는 JRE 를 설치해야 한다. JDK 를 설치하면 JRE 가 포함되어 같이 설치된다. JRE 는 자바 Application을 수행하기 위한 SW ( JVM 과 Class Libraries 등 최소한의 환경 ) 라고 볼 수 있고 JDK 는 JRE + 개발에 필요한 SW 를 모아 놓은 좀 더 큰 범위의 SW 라고 볼 수 있다. 자바 어플리케이션을 개발하기 위해서는 JDK 를 필수로 설치 해야 한다.

Live-Study 2021.02.28

1주차 : JVM 구성 요소

1. Class Loader : 클래스 파일을 로드하는 데 사용되는 하위 시스템이다. 2. Method Area : JVM Method Area 는 메타 데이터, 상수 런타임 풀, 메서드에 대한 코드와 같은 클래스 구조를 저장한다. 공유자원 ( 여기서 공유자원이라는 의미는 다른 스레드에서도 활용 가능한 자원을 말함) 이다. 3. Heap : 모든 객체, 관련 인스턴스 변수 및 배열은 Heap 에 저장된다. 이 메모리는 여러 스레드에 걸쳐 공유된다. 4. JVM Language Stack : Java Language Stacks 는 로컬 변수를 저장하고 부분적인 결과를 얻는다. 각 스레드에는 자체 JVM 스택이 있으며, 스레드가 생성될 때 동시에 생성된다. 메서드를 호출할 때마다 새 프레임이 생성되고, 메..

Live-Study 2021.02.28

1주차 : JIT 컴파일러란 무엇이며 어떻게 동작하는지

JIT 컴파일러란 무엇이며 어떻게 동작하는가 ? JIT 컴파일러 - 기존 클래스파일(바이트코드)를 실행하는 방법은 Interpreter 방식이 기본이다. Interpreter 방식은 명령어를 하나씩 해석해서 처리하는 개념이기 때문에 명령어 하나하나 실행하는 속도는 빠를지 모르지만 전체코드 관점에서는 실행 속도가 느린 단점을 가지고 있다. 해당 문제를 해결하기 나온 방법이 JIT 컴파일러이고 JIT 컴파일러는 런타임 시 클래스파일(바이트코드)를 네이티브 기계어로 한방에 컴파일 후 사용하는 개념으로 이해하는 것이 편한다. 전체 컴파일 후 캐싱 > 이후 변경된 부분만 컴파일하고 나머지는 캐시에서 가져다가 바로 실행. 바로 꺼내서 사용하고 변경 부분만 컴파일 하기 때문에 코드 수행속도가 Interpreter 방..

Live-Study 2021.02.28

1주차 : Byte Code 란 무엇인가 ?

Byte Code란 무엇인가 ? 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드, 자바 컴파일러로 변환되는 코드의 명령어 크기가 1 바이트라서 바이트 코드라고 불린다고 한다. 다시 풀어서 이해하자면 자바는 OS에 종속적이지 않기 위해서 JVM이 이해할 수 있는 언어인 바이트 코드 형태로 제공되고 바이트 코드와 JVM이 있으면 어느 운영체제에 종속적이지 않고 실행된다고 이해하면 된다. ( .java 파일은 확장자가 java인 단순 텍스트 파일이다 ) 프로그램을 실행하는 것은 결국 컴퓨터이다. 다시 말해 프로그램은 컴퓨터가 이해할 수 있는 형태로 작성되어 있어야 한다. 자바 문법으로 작성한 .java 파일은 사람이 이해할 수 있는 언어로 작성했기 때문에 컴퓨터는 이해할 수 없다. 그렇기 때문..

Live-Study 2021.02.28

1주차 : 실행하는 방법 ( JVM 실행 방법 )

java filename.class 위 명령어로 실행할 때 JVM 의 구성요소인 Class Loader 가 fileName.class 파일을 메모리 상의 JVM으로 가져온다. 내부적으로는 ClassLoader > Byte Code Verifier ( 바이트 코드 변조 확인 ) > Execution Engine 에서 실행되는 구조다. Execution Engine 에서 클래스파일( 바이트코드로 구성) 을 기계어로 변경해서 명령어 단위로 실행한다. 다만 명령어 단위 실행은 2가지 방식으로 동작한다. Interpreter 방식 : 명령어를 하나씩 수행 하는 방식 JIT 방식 : 전체 바이트 코드를 네이티브 코드로 변환하고 그 이후에는 네이티브 코드로 실행하는 방식

Live-Study 2021.02.23

1주차 과제 : 컴파일 하는 방법

Java Compiler 흔히 우리가 JIT Compiler 라고 부르는 Compiler 는 실행중에 바이트 코드를 여러가지 다양한 테크닉을 사용하여 JVM 해석 엔진 없이 바로 수행되는 기계어 코드를 만들어 낸다. 그럼으로써 바이트 코드가 가지는 장점과 기계어가 가지는 장점을 결합할 수 있다. 과정 1. Java Compiler (javac 명령어 실행)에 의해 Java Source ( .java 확장자) 로부터 Byte Code ( .class 확장자 )가 생성된다. 2. JVM에 있는 Class Loader 에 의해 Byte Code는 JVM내로 로드되고 실행엔진에 의해 기계어로 해석되어 메모리 상 ( Runtime Data Area)에 배치된다. 3. 실행엔진에는 Interpreter와 JIT (..

Live-Study 2021.02.22