728x90
CS
6

[Design Patterns] Decorator Pattern

음료(Beverage)라는 추상 클래스에 여러 메뉴들을 서브 클래스로 구현한다고 하면 다음과 같이 HouseBlend, DarkRoast, Decaf, Espresso 등을 추가할 수 있다.  하지만 스팀 우유나 두유, 모카와 같은 첨가물이 추가되면 메뉴가 달라지고 추가해야하는 클래스가 무수히 많아지게된다. 추가로 커피 가격까지 달라지게된다. 이와 같은 문제를 해결하기위해서 Beverage 클래스에 첨가물에 대한 정보를 추가해주고 주 메뉴들만 서브 클래스로 구현해주도록 할 수 있다.하지만 위와 같이 구현해주면 첨가물의 가격이 변경되었을 경우 기존 코드를 수정해야한다는 문제와 첨가물의 종류가 추가되면 메소드들도 추가/수정되어야될 수 있다. 그리고 만약 아이스티와 같이 메뉴가 추가될 경우에 whip이 필요없..

CS 2024.05.30

스레드가 많으면 좋을까

1. 동기화 비용 멀티 스레드는 공유된 데이터를 읽고 쓰는 과정에서 동기화 문제가 발생할 수 있다. 그리고 동기화 문제를 해결하기 위해 뮤텍스, 세마포어 등의 기법을 사용한다. 이때 뮤텍스, 세마포어는 데이터에 접근할 때 락을 획득하고 사용 후에는 락을 해제하는 작업을 수행한다. 이렇게 락을 획득하고 해제하는데 추가적인 시간이 소요된다. 따라서 스레드가 많아진다면 당연히 공유된 데이터에 접근하는 스레드가 많아질 것이고 동기화 기법으로 인한 추가적인 시간이 더 소요될 것이다. 2. 거짓 공유 (False Sharing) 먼저 다음과 같이 A라는 배열을 공유한다고 해보자. public interface FalseSharingThread extends Runnable { int[] A = new int[100..

CS 2024.01.06

동시성, 원자성, 동기화, 교착상태(deadlock)

동시성 여러 가지 일이 동시에 진행되는 것을 말한다. 예를 들어서 program을 다운로드 받으면서 youtube를 보는 것과 같다. 원자성 동시성이 일어날때 같은 자원을 사용할 수도 있다. 그러면 하나씩 독점하여 사용한다. 예를 들어서 화장실(자원)의 빈 칸을 찾아 잠그고(lock) 볼일을 다 본 후 잠금을 풀고(unlock) 나오는 행위와 비슷하다. 동기화 신호등으로 교통정리하는 것과 화장실의 잠금 장치의 필요성과 유사하다. 교착상태(deadlock) A라는 사람이 화장실에 들어가서 볼일을 보는데 휴지라는 자원이 없어서 못나간다. 하지만 밖에서는 휴지를 가지고 기다리는 사람들이 줄을 서고 있다. 이렇게 A라는 사람이 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 교착상태(deadlock)이라고 한다.

CS 2023.03.15

객체지향 프로그래밍(OOP, Object-Oriented Programming)

객체지향 프로그래밍(OOP, Object-Oriented Programming) 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식이다. 설계에 많은 시간이 소요되며 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리다. - 추상화 추상화란 복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 의미한다. - 캡슐화 캡슐화는 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말한다. 여기서 "일부를 외부에 감추어 은닉하는 것"을 은닉화라고 한다. - 상속성 상속성은 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것을 말한다. - 다형성 다형성은 하나의 메서드나 클래스가 다..

CS 2022.10.03

디자인 패턴

싱글톤 패턴 싱글톤 패턴은 하나의 클래스에 하나의 인스턴스만 가지는 패턴이다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어든다. 하지만 의존성이 높아진다는 단점이 있다. 싱글톤 패턴은 데이터베이스 연결 모듈에 많이 쓰인다. const URL = 'url' const createConnection = url => ({"url" : url}) class DB{ constructor(url) { if (!DB.instance) { DB.instance = createConnection(url) } return DB.instance } connect() { return this.instance } } const a = new DB(..

CS 2022.10.02
728x90