CS 58

[Design Pattern] 팩토리 메서드(Factory method pattern)

팩토리 메서드 패턴(Factory method pattern) 부모(상위) 클래스에 알려지지 않은 구체 클래스(new 키워드로 객체를 생성할 수 있는 클래스)를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. Factory Method가 중첩되기 시작하면 굉장히 복잡해 질 수 있다. 또한 상속을 사용하지만 부모(상위) 클래스를 전혀 확장하지 않는다. 따라서 이 패턴은 extends 관계를 잘못 이용한 것으로 볼 수 있다. extends 관계를 남발하게 되면 프로그램의 엔트로피가 높아질 수 있으므로 Factory Method 패턴의 사용을 주의해야 한다. // Product: ..

CS 2023.10.23

[Spring] Bean의 생명주기 및 Scope

빈(Bean) 일반 Java 객체와 다른 점은 없으나, 스프링 컨테이너에서 관리되는 객체를 Bean이라고 부른다. 스프링 컨테이너에 의해 생성되고 관리되며, 다음과 같은 단계로 이루어진다 생명주기 1. 정의: 스프링 컨테이너에 빈을 등록하기 위해 XML 파일, Java 어노테이션 등을 사용하여 빈의 정의를 작성 2. 생성: 스프링 컨테이너는 빈의 정의를 기반으로 빈 객체를 생성(클래스의 생성자나 팩토리 메서드 등을 사용) 3. 의존성 주입: 생성된 빈에 대해 필요한 의존성들을 주입한다. 빈의 정의에서 확인하고 해당 빈들을 찾아서 주입한다. 4. 초기화: 빈이 생성되고 의존성이 주입된 후, 초기화 메서드가 호출된다. InitializingBean 인터페이스의 afterPropertiesSet() 메서드나 ..

CS 2023.10.20

[JAVA] UML(Unified Modeling Language)

UML(Unified Modeling Language) 객체지향 소프트웨어 개발 전 단계에서 다양한 측면을 의사소통이 원활하게 이루어지도록 시각화 한 모델링 언어 사물(Things), 관계(Relationships), 다이어그램(Diagram)으로 구성한다. 사물(객체): 다이어그램 안에서 관계가 형성될 수 있는 대상들 관계 : 사물과 사물 사이의 연관성을 표현 실선으로 표현, 방향에 따라 화살표를 사용(양방향일 시 화살표 X) 집합(Aggregation)관계 : 사물이 다른 사물에 포함되어 있는 관계 포함(Composition)관계 : 상호 의존관계이며 독립될 수 없는 관계 일반화(Generalization)관계 : 사물의 구체적인지에 따라 상, 하 관계로 표현 실체화(Realization) : 사물의..

CS 2023.10.19

[Java] 객체지향 분석(OOA) 및 설계(OOD) 및 설계원칙(SOLID)

객체지향 분석(OOA; object-oriented anaysis) 사용자의 요구사항을 토대로 클래스, 관계 등을 정의하여 모델링하는 단계이며 클래스를 식별 및 정의하는 것이 목적이다. 클래스 식별: 실생활에서 어떤 객체들이 서로 유사한 특성과 행동을 가지고 있는지 파악하는 것 ex: 자동차(클래스) - 속도, 연료량 등의 특성을 가지며 주행, 가속, 감속 등의 행동을 할 수 있다. 객체지향 분석의 방법론 Rumbaugh(럼바우) 방법 : 모든 구성요소를 그래픽 표기법(UML)을 이용하여 모델링하는 기법 [JAVA] UML(Unified Modeling Language) UML(Unified Modeling Language) 객체지향 소프트웨어 개발 전 단계에서 다양한 측면을 의사소통이 원활하게 이루어지..

CS 2023.10.19

[Java] 객체지향 프로그래밍(OOP; Object-Oriented Programming)

객체지향 프로그래밍(OOP; Object-Oriented Programming) OOP는 소프트웨어 개발 방법론 중 하나로, 현실 세계의 사물을 모델링하여 소프트웨어를 개발하는 방법이다. 프로그램을 "객체"의 모임으로 보고, 객체들 간의 상호 작용을 통해 프로그램을 구성한다. 크게 클래스, 객체, 메서드로 구성된다. 클래스(class) 같은 종류의 집단에 속하는 속성과 행위를 정의한 것(인스턴스의 청사진) 객체(object) 데이터(상태) 와 데이터를 처리하는 메서드(행위)를 캡슐화한 하나의 SW 모듈 클래스로 의해 생성된 객체를 인스턴스(instance) 라고 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화 라고 한다. 데이터: 속성, 상태, 변수, 상수, 자료구조 라고도 함 메서드(meth..

CS 2023.10.19

[Spring] PSA(Portable Service Abstraction)

추상화(Abstraction) 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것 PSA(Portable Service Abstraction): 휴대용 서비스 추상화 Portable은 휴대용이라는 의미로 JDBC Driver 의 종류를 비즈니스 로직의 수정없이 변경할 수 있는 것을 의미한다. 즉, MySQL Driver 를 사용하다 Oracle Driver 로 변경 시, 비즈니스 로직 수정 없이 바꿀 수 있다는 것이다. 이런 기능이 가능한 것은 추상화 계층이 존재하기 때문이다. 모든JDBC Driver 는 공통적인 인터페이스를 가지고 있어 다른것으로 대체하어도 프로젝트에 영향을 끼치지 않는다. 이러한 점에서 Spring PSA 는 확장에는 열려있고 수정에는 닫혀있어야 ..

CS 2023.10.18

[OS] 캐시의 지역성

캐시 메모리(Cache Memory) 캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다. 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두어 처리 속도를 빠르게 한다. 여기서 캐시 기억장치와 주기억장치 사이에서 정보를 옮기는 것을 사상(Mapping, 매핑)이라고 한다. Mapping의 3가지 방법 직접 매핑(Direct Mapping) 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 사상될 수 있는 매핑 방법. 간단하고 구현하는 비용이 적다는 장점이 있지만 캐시 적중률이 낮아질 수 있다. 연관 매핑(Associate Mapping) 직접 매핑 방식의 단점을 보완한 방식. 모든 태그들을 병렬로 검사하기 때문에 복잡하고 비용이 높다는 단점 ..

CS 2023.10.07

[OS] 가상 메모리(Virtual Memory System)란?

가상 메모리 등장 배경 프로세스는 작업 처리를 위해 메모리를 할당 받아야 한다. 컴퓨터의 실제 메모리 공간보다 프로세스가 처리해야할 메모리 공간이 더 많을 수 있다. 이 부분을 해결하기 위해 가상 메모리가 등장하게 되었다. 가상 메모리는 물리 메모리보다 큰 프로세스나 여러 개의 프로세스들을 동시에 실행시킬 수 있도록 하기 위한 방법이다. 가상 메모리란? 가상 메모리(Virtual Memory)는 운영체제에서 실제 물리 메모리(RAM)보다 큰 주소 공간을 프로세스에 제공하기 위해 사용되는 기술이다. CPU가 프로세스를 처리할 때, 특정 시점에 프로세스의 특정 메모리를 접근(액세스)하는 주소값은 아주 작을 것이다. 가상 메모리는 프로세스와 관련된 주소값을 저장하는 메모리 공간을 분리하여 관리함으로써 내 컴퓨..

CS 2023.10.07

[OS] 세마포어(Semaphore)와 뮤텍스(Mutex)

세마포어(Semaphore)와 뮤텍스(Mutex) 다중 프로세스 또는 스레드 환경에서 공유된 자원에 대한 접근을 조절하기 위한 동기화 기법 세마포어 (Semaphore) 공유 자원에 대한 접근을 여러 프로세스 또는 스레드가 조절하기 위한 방법 - 주로 특정 리소스의 사용을 관리하고, 동시에 여러 프로세스/스레드가 접근할 수 있는 수를 제한하는 데 사용 - 일반적으로 0 이상의 값을 가지며, 해당 값은 동시 접근을 허용하는 허용치를 나타낸다. - 소유권이 없다(세마포어를 해제할 수 있는 프로세스나 스레드가 다를 수 있다) - 공유 자원이 한정되어 있는 상황에서 사용한다(특정 리소스의 최대 동시 접근 허용량을 제어할 때 사용) - 상대적으로 많은 오버헤드를 가진다.(정수 카운터 관리 등) 작동 방식 - `P..

CS 2023.10.07

[OS] 교착상태와 기아상태란? 해결방법

Dead Lock(교착상태) 다중 프로세싱 환경에서 두 개 이상의 프로세스가 특정 자원할당을 무한정 대기하는 상태 아래 조건 중 하나라도 미충족 시 교착상태가 발생하지 않음 상호 배제(Mutual Exclusion) : 한번에 한개의 프로세스만이 공유 자원을 사용할 수 있어야 한다 점유와 대기(Hold and Wait) : 자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것 비선점(Non-Preemption) : 다른 프로세스에 할당된 자원은 강제로 뺏을 수 없어야 한다 환형 대기(Circular Wait) : 원형 구조로 구성되어 있어 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다 교착상태 해결방법 예방 기법(Prevention) : 사전에..

CS 2023.10.06