본문 바로가기

분류 전체보기71

[Java] 클래스 로더 서브시스템(Class Loader SubSystem) Class Loader SubSystem 출처 클래스 로더(Class Loader SubSystem)는 자바 바이트 코드(.class)를 로드하고 JVM의 메모리 영역인 Runtime Data Areas로 동적 로딩하는 역활을 수행합니다. 클래스 로더는 필요에 따라 클래스 파일을 검색하고 로드하며, 로드된 클래스는 메모리 영역에 할당됩니다. 클래스를 로딩하는 과정은 3단계로 이루어집니다. 로드(Loading): 클래스 로딩은 먼저 해당 클래스 파일을 찾아서 메모리에 로드하는 과정입니다. 클래스 로더는 클래스 파일을 파일 시스템, JAR 파일, 네트워크 등에서 찾아옵니다. 링크(Linking): 로드된 클래스 파일의 바이트 코드는 아래 3단계의 링크 과정을 거쳐서 최종적으로 실행 가능한 형태로 변환됩니다... 2023. 8. 3.
[GoF] 템플릿 메소드 패턴(Template Method Pattern) Template Method Pattern 템플릿 메소드 패턴(Template Method Pattern)은 Gang of Four(GoF) 디자인 패턴 중 하나로 Design Patterns: Elements of Reusable Object-Oriented Software 책에서 소개 된 23가지 디자인 패턴 중 하나입니다. 템플릿 메소드 패턴은 행동 패턴으로써 특정 알고리즘을 사용하는 유사한 클래스들의 알고리즘의 구조를 정의하고, 하위 클래스에서는 구조를 변경하지 않고 특정 단계 메소드들을 구체화하여 해당 구조를 표현하기 위해서 사용됩니다. 이를 통해 클라이언트는 특정 알고리즘 구조(템플릿)를 변경하지 않고 구체 메소드를 확장하거나 재정의할 수 있는 유연성을 제공합니다. 또한 정의된 구조를 제외하고.. 2023. 8. 2.
[Java] String & StringBuilder & StringBuffer String String은 각각의 문자를 나열한 배열을 나타내는 객체입니다. Java에서 제공하는 Primitive Type(원시 타입)을 제외한 모든 나머지들은 객체로 구성되어 있으며 객체 생성은 생성자(construct)를 통해 이루어집니다. 하지만 String은 객체를 생성할 때 생성자를 사용하는 방법 외에도 바로 값을 할당하여 생성할 수 있는데 이를 문자열 리터럴(String Literal)이라 부릅니다. public static void main(String[] args) { String str1 = new String("a"); // 생성자 String str2 = "a"; // 문자열 리터럴 } String은 위와 같이 두가지 방법으로 객체를 생성할 수 있습니다. 첫번째 방법은 일반적으로 객.. 2023. 8. 1.
[GoF] 컴포지트 패턴(Composite Pattern) Composite Pattern 컴포지트 패턴(Composite Pattern)은 Gang of Four(GoF) 디자인 패턴 중 하나로 Design Patterns: Elements of Reusable Object-Oriented Software 책에서 소개 된 23가지 디자인 패턴 중 하나입니다. 컴포지트 패턴은 구조 패턴으로써 객체들을 트리 구조로 구성하는 방법을 제공하며 개별 객체와 복합 객체를 일관된 방식으로 다룰 수 있게 해주고, 객체 간의 전체-부분 계층을 표현할 수 있도록 합니다. 컴포지트 패턴의 주요 아이디어는 단일 객체와 복합 객체를 동일한 인터페이스로 다루기입니다. 이를 통해 클라이언트는 개별 객체와 복합 객체를 구별하지 않고 일관된 방식으로 즉, 클라이언트는 개별 객체든 복합 객체.. 2023. 7. 31.
[Spring] DL(Dependency Lookup) 의존성 조회(Dependency Lookup: DL)이란? 의존성 조회(Dependency Lookup: DL)은 제어의 역전(Inversion of Control: IoC) 원칙을 구현한 디자인 패턴 중 하나입니다. IoC 컨테이너가 객체 생성과 의존성 주입을 담당하는 의존성 주입(Dependency Injection: DI)과는 다르게 DL은 개발자가 필요한 시점에 의존성을 요청하여 컨테이너로부터 해당 의존성을 가져옵니다. DL은 컨택스트별 의존성 조회(Contextualized Dependency Lookup: CDL)를 사용하여 의존성을 조회하는데, 이는 결국 스프링에서 관리하는 컨택스트인 ApplicationContext를 기반으로 빈과 빈들의 의존성을 조회한다는 뜻입니다. 즉, 특정 설정 파일.. 2023. 7. 31.
[CS] CPU의 구조와 기능(1) CPU의 구조와 기능 CPU는 기억장치에 저장되어 있는 프로그램 코드인 명령어들을 실햄함으로써 프로그램 수행이라는 컴퓨터의 기본적인 기능을 수행하는데, 그를 위하여 CPU가 수행해야 하는 세부적인 동작들을 순서대로 나열하면 다음과 같습니다. 명령어 인출(Instruction fetch): 기억장치로부터 명령어를 읽어옵니다. 명령어 해독(Instruction decode): 수행해야 할 동작을 결정하기 위하여 명령어를 해독합니다. 데이터 인출(Data fetch): 명령어 실행을 위하여 데이터가 필요한 경우에는 기억장치 혹은 I/O 장치로부터 그 데이터를 읽어옵니다. 데이터 처리(Data process): 데이터에 대한 산술적 혹은 논리적 연산을 수행합니다. 데이터 저장(Data store): 수행한 결과.. 2023. 7. 30.
[Spring] Spring Container 스프링 컨테이너 스프링 컨테이너는 스프링에서 객체의 생성, 관리, 조립 등을 담당하는 컨테이너입니다. org.springframework.context.ApplicationContext 인터페이스를 스프링 컨테이라 부르며, XML 또는 어노테이션 기반의 자바 설정 클래스로 생성이 가능합니다. ApplicationContext는 다양한 인터페이스를 상속받으며 빈 관리 기능 & 어플리케이션 부가 기능을 제공합니다. ApplicationContext가 상속 받는 인터페이스의 제공 기능은 아래와 같습니다. BeanFactory: 빈 객체를 생성하고 빈의 인스턴스화, 의존성 주입, 라이프사이클 관리하는 역할을 담당하는 인터페이스입니다. HierarchicalBeanFactory: 부모-자식 관계를 가지는 Bean.. 2023. 7. 27.
[Spring] 스프링의 예외 처리 방법 스프링의 기본 예외 처리 방법 자바 프로그램은 예외가 발생하면 예외 정보를 남기고 스레드가 종료되는 반면에 스프링은 예외가 발생했을 때 웹 애플리케이션이 종료되지 않고 HTTP 상태 코드가 노출이 됩니다. 스프링 부트는 컨트롤러 이하에서 발생한 예외를 캐치하여 스레드를 종료 시키는 것이 아닌 예외 내용을 디스패처서블릿에서 에러컨트롤러로 다시 요청을 보냄으로써 마치 정상 요청인 것처럼 예외 내용을 처리하도록 동작하게 됩니다. 하지만 최초 요청과 더불어 예외 요청을 위해 컨트롤러를 2번 호출한다는 것은 꽤나 복잡하다고 느껴지며 또 이는 필터나 인터셉터를 2번 호출하는 것과 같은 다른 문제를 야기할 수 있습니다. 이런 중복 호출을 방지하기 위해 필터는 등록할 때 DispatcherType을 설정 할 수 있으며.. 2023. 7. 26.
[CS] 컴퓨터 시스템(Computer System) 컴퓨터 시스템은 기본적으로 하드웨어와 시스템 소프트웨어로 구성되며, 그러한 시스템에 각종 응용 소프트웨어들이 탑재되어 사용자와 상호 작용하면서 프로그램을 처리합니다. 컴퓨터가 프로그램 형태로 주어진 작업을 수행하기 위해서는 전기적 신호들로 표현된 정보들을 해석하거나 이동시키고 처리하여 새로운 정보를 생성해야합니다. 컴퓨터에서 각종 정보의 전송 통로를 제공해주고, 정보에 대한 처리가 실제 일어나게 해주는 물리적인 실체들을 하드웨어라 부릅니다. 소프트웨어란 정보들이 이동하는 방향과 정보 처리의 종류를 지정해주고, 그러한 동작들이 수행될 시간을 지정해주는 명령들의 집합입니다. 하지만 소프트웨어는 하드웨어에 의존적입니다. 소프트웨어는 하드웨어가 제공해주는 기능들을 이용하여 최종적인 결과를 얻을 수 있도록 도와주.. 2023. 7. 26.