2022/05
JVM. 클래스로더 서브시스템(Class Loader Subsystem)
JVM. 클래스로더 서브시스템(Class Loader Subsystem)
2022.05.16JVM은 RAM에 위치하며, 실행 중에 클래스로더 서브시스템을 이용하여 클래스 파일을 RAM으로 가져옵니다. 이를 자바의 동적 클래스 로딩 기능이라고 합니다. 이 과정은 컴파일 타임이 아니라 런타임에 일어나며, 처음으로 클래스를 참조할 때 클래스 파일(.class)을 로드하고, 링크하고, 초기화 합니다. 로딩(Loading) 컴파일된 클래스(.class 파일)을 메모리에 적재하는 것이 클래스로더(class loader)의 주요 작업입니다. 보통, 클래스 로딩 과정은 메인 클래스(즉, static main() 메서드 선언이 있는 클래스)를 로드하는 것부터 시작됩니다. 이외에도 클래스 로딩은 아래의 상황에서 일어날 수 있습니다. // 클래스에 선언된 정적 메서드를 호출할 때 Car.invokeStaticMe..
번외편. 인터페이스라는 이름의 계약
번외편. 인터페이스라는 이름의 계약
2022.05.14이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
SOLID. 의존관계 역전 원칙(Dependency inversion principle)
SOLID. 의존관계 역전 원칙(Dependency inversion principle)
2022.05.14의존관계 역전 원칙 의존관계 역전 원칙은 객체 지향 설계의 다섯 가지 기본 원칙(SOLID) 중 하나(D)입니다. 이를 인터페이스 편의 설계적인 관점에 넣으려고 했으나 상당히 중요한 부분이기 때문에 이렇게 따로 빼놨습니다. 위키백과의 정의를 빌어오자면 의존관계 역전 원칙(dependency inversion principle)은 "추상화에 의존해야지, 구체화에 의존하면 안된다"는 것입니다. 풀어서 설명하면, 첫 번째는 고수준 모듈(혹은 클래스)이 저수준 모듈(혹은 클래스)에 의존하지 말아야 합니다. 즉, 둘 다 추상화에 의존해야 합니다. 이 이유는 잠시 후 같이 살펴볼 것입니다. 고수준(high level)과 저수준(low level) 저수준 클래스는 고수준 클래스의 작업을 돕는 작은 클래스라고 할 수 ..
디자인 패턴. 싱글턴 패턴(Singleton pattern)
디자인 패턴. 싱글턴 패턴(Singleton pattern)
2022.05.08정의 싱글턴(singleton)은 오직 하나의 객체만을 생성할 수 있는 클래스를 말합니다. 따라서 싱글턴 패턴을 사용하면 쉽게 객체의 유일성을 보장할 수 있습니다. 또한 일반적으로 싱글턴 객체에 대한 참조를 public static 필드나 public static 메서드로 노출하므로 어디에서나 싱글턴 객체에 접근할 수 있습니다. 구현 public static final 필드 객체가 오직 하나만을 보장하려면 어떻게 해야 할까요? 바로 정적(static) 필드를 사용하는 것입니다. 정적 필드를 사용하면 모든 객체가 공유하는 필드를 만들 수 있으며, 한 번만 생성되고 별도의 메모리 공간에 저장된다는 특징이 있습니다. public class Singleton { public static Singleton INS..
36편. 열거형(Enum Types)
36편. 열거형(Enum Types)
2022.05.05열거형(Enum Type) 열거형(enum)은 여러 상수로 이루어진 고정 집합을 나타내는 특수 데이터 타입이라고 할 수 있습니다. 더 정확하게 말하면 자바 클래스의 특별한 한 종류라고 말할 수 있습니다. 보통 열거형은 아래와 같이 선언합니다. class, interface가 들어갔던 자리에 enum이 들어온 것을 눈여겨봐 주세요. enum 이름 { 상수1, 상수2, ..., 상수N } 열거형을 사용하면 서로 관련 있는 상수를 논리적으로 그룹화할 수 있습니다. 예를 들어서 방위(동, 서, 남, 북)를 나타내려면 열거형을 아래와 같이 쓸 수 있습니다. enum CardinalDirection { EAST, WEST, SOUTH, NORTH } 열거형 필드 작명 관습 열거형 작명 규칙은 클래스와 동일하고(즉,..
32편. 파일 입출력(File input and output)
32편. 파일 입출력(File input and output)
2022.05.04스트림(Stream) 파일 입출력을 알아보기 전에 스트림이 무엇인지 이해해야 합니다. 여기서 말하는 스트림은 읽거나 쓸 수 있는 1차원적인 데이터의 흐름을 말합니다. 마치 강이 상류에서 하류로 흐르는 것처럼, 데이터도 어느 한 출발지(source)에서 목적지(destination)로 흐르는 것처럼 말이죠. 여기서 출발지와 목적지는 파일, 키보드나 모니터, 원격 네트워크, 데이터베이스 시스템, 다른 프로그램 등과 같이 다양한 자원들이 될 수 있습니다. 프로그램을 기준으로 잡고 외부 자원(파일, 키보드 등)으로부터 데이터를 읽고 싶다고 해봅시다. 그러면 자연스럽게 외부 자원은 데이터의 출발지 혹은 데이터의 원천이 될 것입니다. 이렇게 출발지에서 생성된 데이터는 목적지인 프로그램으로 흐릅니다. 이때 이 흐름을..