전체 글(100)
-
[일문일답][Java] 가비지 컬렉션(GC) - 1
1. Garbage Collection(가비지 컬렉션) 이란? Garbage Collection 프로그램을 개발하다보면 유효하지 않은 메모리인 가비지(Garbage)가 발생하게 된다. C언어를 사용한다면 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 Kotlin을 이용해 개발을 한다면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해 일반적으로 null을 선언해준다. Person person = new Person(); person.setName("choi"); person = null; // 가비지 발생 person = new Person..
2022.08.24 -
[일문일답][Java] JVM의 메모리 구조란?
JVM이란? JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 불린다. 자바와 OS 사이에서 중개자 역할을 수행하며, 자바가 OS에 구애받지 않고 프로그램을 실행할 수 있도록 돕는다. 또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다. 다음은 자바 프로그램의 실행 단계이다. 먼저, 자바 컴파일러에 의해 자바 소스 파일이 바이트 코드로 변환된다. 그리고, 이러한 바이트 코드를 JVM에서 읽어들인 다음에, 복잡한 과정을 거쳐 어떤 OS든간에 프로그램을 실행시킬 수 있도록 만들게 된다. 만일, 자바 소스 파일은 리눅스에서 만들고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우용 JVM을 설치만 하면 된다..
2022.08.24 -
[일문일답][Java] Java의 접근 제어자 종류
접근 제어자(Access Modifier) 변수나 메소드의 사용 권한은 다음과 같은 접근 제어자를 사용하여 설정할수 있다. private default protected public private → default → protected → public 순으로 보다 많은 접근을 허용한다. 하나씩 순서대로 살펴보자. private 접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다. public class Sample { private String secret; private String getSecret() { return this.secret; } } 위 예제의 secret 변수와 getSecret 메소드는 오직 Sample 클래스에서만 접..
2022.08.23 -
[일문일답][Java] Managed - Unmanaged 언어의 차이
Managed Code CLR(Common Language Runtime, 공통 언어 런타임) 이나 JVM 같은 런타임에서 실행이 관리되는 코드 다음 그림은 JVM 환경(CLR도 포함)에서 코드가 컴파일러에 의해 Native Code로 변환되는 과정이다. 컴파일러에 의해 생성된 중간언어 IL(Intermediate Language)는 JVM(CLR) 환경에서 현재 OS 환경에 맞는 Native Code로 변환되어 동작한다. 그리고, 이 변환 과정을 제공함으로써 Managed Code는 다양한 OS 환경에서 동일하게 동작할 수 있게 된다. 그리고 이렇게 JVM(CLR)에 의해 관리되는 언어들을 Managed Code라고 한다. Virtual Machine 위에서 코드가 실행된다. 특징 객체 지향 모델 : ..
2022.08.23 -
[디자인 패턴] 2. 옵저버 패턴
옵저버 패턴이란? 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 주제(Subject Object)에서 중요한 데이터를 관리한다. 주제 데이터가 바뀌면 옵저버에게 그 소식이 전해진다. 옵저버 객체들은 주제를 구독하고 있으며(주제 객체에 등록되어 있으며) 주제 데이터가 바뀌면 갱신 내용을 전달받는다. 옵저버가 아닌 객체는 주제 데이터가 바뀌어도 아무 연락을 받을 수 없다. 구현 구현은 보통 주제 인터페이스와 옵저버 인터페이스가 들어있는 클래스 디자인으로 구현한다. 구조 Subject 주제를 나타내는 인터페이스 주제가 상태를 저장하고 제어한다. 데이터의 주인은 주제이다. 객체에서 옵저버로 등록하거나 옵저버 목록에서 탈퇴하고 ..
2022.08.23 -
[디자인 패턴] 1. 전략 패턴
상속의 문제점 Duck 클래스 ----------- - quack() - swim() - fly() 오리들이 공통적으로 울음소리, 수영, 날기를 할 수 있다고 생각해 Duck 상위 클래스를 만들고 하위 클래스에서 Duck 클래스를 상속받아 구현한다고 가정하자. 그렇지만 나무오리라면 날 수도 소리낼 수도 없다. 나무오리라면 아래와 같이 오버라이드 해야 한다. DecoyDuck ----------- quack() { // 아무것도 하지 않도록 오버라이드 } display() { // 가짜오리 } fly() { // 아무것도 하지 않도록 오버라이드 } 이렇게 상속하는 상황에는 문제점이 존재한다. 상속은 아래와 같은 단점을 가진다. 서브클래스에서 코드가 중복 실행 시 특징을 바꾸기 힘들다. 모든 오리의 행동을 ..
2022.08.22