전체 글 555

면접 준비 : GC (Garbage Collection)

Q. GC가 무엇이고 필요한 이유는 뭔가요? A. GC는 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭합니다. 이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문입니다. 따라서 객체를 사용하고 제거하는 기능이 필요하게 됩니다. Q. GC의 동작방식에 대해 설명해주세요 A. GC의 동작방식은 가장 간단한 Serial GC 방식으로 설명합니다. GC는 Minor GC, Major GC로 구분할 수 있습니다. Minor GC는 young한 영역에서, Major GC는 old한 영역에서 일어난다고 정의합니다. GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지합니다. 이를 Stop-the-world라고 합니다. Minor GC는 E..

GC (Garbage Collection)의 알고리즘

GC의 정의 GC는 Garbage Collector의 약자로 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭한다. 이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문이다. 따라서 객체를 사용하고 제거하는 기능이 필요하게 된다. GC의 동작방식 GC의 동작방식을 정리하면 다음과 같다. GC의 동작방식은 가장 간단한 Serial GC 방식으로 설명한다. GC는 Minor GC, Major GC로 구분한다. Minor GC는 young한 영역에, Major GC는 old한 영역에서 일어난다. GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지한다. Minor GC는 Eden 영역이 가득 차면 시작한다. Eden 영역에서 참조가 남아..

Java 2022.07.14

면접 준비 : JVM

Q. JVM이 뭔가요? / JVM에 대해서 설명해주세요 A. 자바 가방 머신의 약자로 JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것입니다. 메모리 관리를 수행하며 스택 기반의 가상머신입니다. Q. JVM의 구조를 설명해주세요 A1. JVM의 구조는 Class Loader, Execution Engine, Runtime Data Areas, JNI, Native Method Library로 이루어져 있습니다. 이 뒤는 자세하게 듣기를 원하면 대답하기 A1-1. Class Loader는 JVM내로 클래스들을 로드하고 링크를 통해 배치하는 작업을 수행합니다. Execution Engine은 바이트 코드를 실행시키는 역할을 하며, 구성 요소로는 인터프리터, JIT ..

JVM (Java Virtual Machine)

위 그림은 자바 코드의 실행 과정을 간략하게 보여준다. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로하는 메모리를 할당 받는다. (JVM은 이 때 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.) 자바 파일(.java)이 자바 컴파일러에 의해 자바 바이트코드(.class)로 변환된다. 클래스 로더를 통해 자바 바이트 코드를 JVM으로 필요한 시점에 로딩한다. 해석된 바이트 코드는 런타임 데이터 영역에 배치되어 실질적인 수행이 이루어진다. 실행 과정 속에서 JVM은 필요에 따라 GC와 같은 관리 작업을 수행한다. 자바 코드가 실행되는 과정을 살펴보면 C / C++과는 다르다는 것을 알 수 있다. C / C++은 운영체제별로 컴파일러가 존재하여 해당 운영체제가 인식할 수 있는 기계어로 변환된..

Java 2022.07.14

면접 준비 : 프록시 패턴

Q. 프록시 패턴이 뭔가요? A. 인터페이스를 사용하고 실행시킬 클래스에 대해 객체가 들어갈 자리에 대리자 객체를 대신 투입하여, 클라이언트는 실제 실행시킬 클래스에 대한 메소드를 반환하는지 대리 객체의 메소드를 반환하는지를 모르게 하는 것을 말합니다. Q. 프록시 패턴은 왜 사용하나요? A. 프록시 패턴은 전처리 및 후처리 사용에 용이하고, 특정 메서드에 대한 보안이 좋습니다. 하지만 프록시 패턴을 사용시 가독성이 떨어질 수 있다는 단점도 존재합니다. Q. 프록시 패턴은 언제 사용하나요? A. 지연 로딩을 사용하거나, 필요할 때 객체를 추가시키고 싶을 때 사용하면 좋습니다. 또한 보안 문제로 인하여 특정 메서드의 접근을 제어하고 싶지 않을 때도 사용할 수 있습니다. https://coding-revie..

프록시 패턴

프록시 패턴은 무엇인가? 프록시 패턴은 인터페이스를 사용하고 실행시킬 클래스에 대해 객체가 들어갈 자링네 대리자 객체를 대신 투입하여, 클라이언트는 실제 실행시킬 클래스에 대한 메소드를 반환하는지 대리 객체의 메소드를 반환하는지를 모르게 하는 것을 말한다. 프록시 패턴은 왜 사용할까? 프록시 패턴은 전처리 및 후처리 사용에 용이하고, 특정 메서드에 대한 보안이 좋다. 하지만 프록시 패턴을 사용시 가독성이 떨어질 수 있다는 단점도 존재한다. (런타임 의존도가 복잡하기 때문) 프록시 패턴은 지연 로딩을 사용하거나, 필요할 때 객체를 추가시키고 싶을 때 사용하면 좋다. 또한 보안 문제로 인하여 특정 메서드의 접근을 제어하고 싶지 않을 때도 사용할 수 있다. 프록시 패턴의 구조 프록시 패턴 예제 1. Subje..

면접 준비 : 데코레이터 패턴

Q. 데코레이터 패턴이 뭔가요? / 데코레이터 패턴에 대해 설명해주세요. A. 데코레이터 패턴은 주어진 상황 및 용도에 따라 어떤 객체에 책임을 동적으로 추가하는 패턴을 말합니다. Q. 데코레이터 패턴은 왜 사용하나 A. 데코레이터 패턴을 사용하면 기존 코드를 수정하지 않고도 행동을 확장시킬 수 있습니다. 또한 구성과 위임을 통해서 실행중에 새로운 행동을 추가할 수도 있습니다. 하지만 의미없는 객체들이 너무 많이 추가될 수 있다는 단점도 존재합니다. Q. 데코레이터 패턴은 언제 사용하나요? A. 클래스의 요소들을 계속해서 수정하면서 사용하는 구조인 경우나 여러 요소들을 조합해서 사용하는 클래스 구조인 경우에 사용합니다. https://coding-review.tistory.com/119 데코레이터 패턴 ..

데코레이터 패턴

데코레이터 패턴은 무엇인가? 데코레이터 패턴은 주어진 상황및 용도에 따라 객체의 책임을 동적으로 추가할 수 있는 패턴을 말한다. 데코레이터 패턴은 프록시를 이용해 부가기능을 추가해주는 역할을 하는 패턴이다. 트랜잭션시작을 쉽게 해주는 @Transactional과 같은 AOP들이 데코레이터 패턴을 이용해 만든 것들이다. 데코페이터 패턴을 사용하면 기존 코드를 수정하지 않고도 행동을 확장시킬 수 있으며, 구성 및 위임을 통해 실행중인 행동을 추가할 수도 있다. 클래스의 요소들을 계속해서 수정하면서 사용하는 구조인 경우나, 일부 요소들을 조합해서 사용하는 클래스 구조인 경우에 사용하면 좋다. 데코레이터 패턴의 구조 데코레이터 패턴 예제 Component라는 인터페이스에서 런타임 의존관계를 계속해서 추가하는 방..

면접 준비 : 전략 패턴

Q. 전략 패턴이 뭔가요? A. 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. Q. 전략 패턴을 왜 사용하나요? A. 새로운 전략을 추가하더라도 기존 코드를 변경하지 않아도 되고, 상속 대신 위임을 사용한다는 장점이 있습니다. 위임을 사용한다는 것은 상속을 강요하지 않는다는 것이고 이는 상속이 정말 필요한 곳에 쓰일 수 있다는 뜻입니다. Q. 전략 패턴을 언제 사용하나요? A. 런타임에 전략을 바꾸고 싶을 때 사용합니다. Q. 전략 패턴과 템플릿 메서드 패턴의 차이점이 뭔가요? A. 템플릿 메서드 패..

전략 패턴

전략패턴이란 무엇인가? 전략패턴이란 객체가 할 수 있는 각각의 행위에 대해 전략클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 변경하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장시킬 수 있는 패턴을 말한다. 전략패턴은 변하지 않는 부분은 Context라는 곳에 두고, 변하는 부분은 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다. 전략패턴을 사용하면 전략을 추가하더라도 기존 코드를 변경하지 않아도 되고 상속대신 위임을 사용하게 된다. 위임을 사용한다는 것은 상속을 강요하지않는다는 것이고 이는 상속이 정말 필요한 곳에 사용할 수 있다는 ..