CS 7

[디자인 패턴] 빌더패턴 (Builder Pattern)

빌더 패턴은 클래스의 객체를 만들 때, 선택적 매개변수가 많은 경우 유용하다.class Student { private String name; private int age; private int number;}이 Student 클래스의 객체를 만들 때, 생성자/Setter/빌더 중 뭘 사용해야 좋을까? 1. 점층적 생성자 패턴다양한 매개변수를 입력받아서 인스턴스를 생성하고싶을 때마다 사용하던 생성자를 오버로딩하는 방법도 있다. 이것을 '점층적 생성자 패턴(Telescoping Constructor Pattern)'이라고 한다. class Student { private String name; private int age; private int number; publi..

CS 2025.01.10

[디자인 패턴] 정적 팩토리 메서드 (Static Factory Method)

🖍️ new 키워드의 단점?우리는 객체를 생성할 때 보통 new 키워드로 직접 생성자를 호출해서 생성한다.Calc c = new Calc(); new 키워드는 간단하지만 단점이 존재한다.읽기 어려운 생성자생성자의 매개 변수가 많아지면 읽기가 힘들고 유지 보수가 어렵다.객체의 특징을 파악하기 어려움생성자의 이름은 바꿀 수 없으므로 생성되는 객체의 목적과 의미를 구분지을 수 없다. 예) new Calc(int x, int y);와 new Calc(int x, int y, int z); 둘은 성격이 다르지만 모두 Calc라는 이름의 생성자를 사용객체 제어 불가생성자는 응집도를 높이기 위해 내부에 코드를 구현하지 않는 것이 권장된다.따라서 생성자 내부에 객체 생성 로직을 두기 어려우므로 객체 생성 과정을 제어..

CS 2025.01.08

[네트워크] Server-Sent Event

🔈 알림 기능 구현 방법 4가지Short-Polling클라이언트가 서버에 짧은 주기를 두고 정기적으로 새로운 이벤트가 있는지 요청을 보내는 방법서버에서 보내줄 새로운 데이터가 없어도 즉시 빈 응답을 보내고 받는 작업을 반복하기 때문에 불필요한 트래픽 발생, 비효율적Long-PollingShort Polling과 달리 새로운 이벤트가 발생하면 응답하는 방법불필요한 요청과 응답이 없어지고 보다 실시간성이 보장됨그러나 커넥션을 유지하는 동안은 서버의 리소스 지속적으로 소모응답이 없다면 timeout (보통 100~300 seconds로 설정)SSE(Server Sent Events)클라이언트가 HTTP Request 헤더로 keep-alive 요청을 하면 일정 시간 동안 연결이 유지됨연결 유지되는 동안 H..

CS 2025.01.05

[운영체제] 동시성 이슈 해결 방법 - Semaphore/Mutex

지난 포스팅에서 동시성 문제인 '레이스 컨디션'과 '데이터 레이스'에 대해 알아보았다.이번 포스팅에서는 그 해결 방법인 Semaphore과 Mutex에 대해 알아보자.동시성 이슈주요 원인 :data race데이터 접근 절차는 atomic하지 않음 (읽기->연산->쓰기)단일 코어 : 하나의 instructor 실행 중 cpu 사용 권한을 뺏기는 경우 동시에 같은 memory address 읽을 가능성 존재멀티 코어 : 여러 cpu에서 동시에 같은 memory address 읽을 가능성 존재race condition멀티 스레드 : 프로세스의 공유 데이터 사용 중 발생멀티 프로세스 : 커널 내부의 공유 데이터 사용 중 발생해결 방법 :단일 코어 : 공유 자원에 접근한 경우 계속해서 그 프로세스가 cpu를 점유..

CS 2024.12.31

[운영체제] 동시성 이슈란 - Race Condition/Data Race

멀티 스레드 환경의 동시성 문제멀티 스레드 환경에서는 공유 자원에 여러 스레드가 동시에 접근하려고 경쟁하게 되는데, 이를 '동시성 문제'라고 한다. 동시성 문제의 예시로는 레이스 컨디션, 데이터 레이스가 있다. 1. 레이스 컨디션 (race condition)스레드가 실행되는 순서가 항상 보장되지 않아서 발생하는 문제. 여러 스레드가 공유 자원을 병행적으로(concurrently) 읽거나 쓸 때 자원에 접근한 순서에 따라 그 실행 결과가 바뀌는 상황이다.  (예제 1)아래 코드를 보면 main() 고루틴과 func() 고루틴이 멀티 스레드로 실행된다.그런데 만약 (1) -> (2) 순으로 수행되었다면 아무것도 출력되지 않을 것이고, (2) -> (1) 순으로 수행되었다면 'the value is 1'이라..

CS 2024.12.23

[운영체제] 프로세스 - 메모리 공간/상태(state)/문맥 교환(context-switching)/pcb/프로세스 vs 스레드

1. 운영체제운영체제는 여러 프로그램이 동시에 실행될 때, 하드웨어 자원(cpu, memory, disk, i/o devices)을 각 프로그램에게 최대한 효율적으로 분배해주는 역할을 한다. 프로세스가 연산을 하기 위해서는 cpu와 memory를 사용해야 하는데, 자원은 한정적이므로 모든 프로세스가 동시에 사용할 수 없다. 따라서 운영체제가 일정 시간마다 자원을 사용할 프로세스를 지정해준다. -오늘날 cpu는 보통 시분할 방식(time sharing)을 따른다.운영체제는 사용자가 하드웨어 자원에 접근하기 위한 인터페이스를 제공해주기도 한다. 사용자는 GUI 또는 CLI를 통해서 os에게 명령을 내릴 수 있다. 운영체제는 하드웨어의 device driver를 사용해서 프로세스가 하드웨어 장치를 사용할 수 ..

CS 2024.12.20

[운영체제] 하드웨어 - 불 논리/불 연산/가산기(adder)

1부 하드웨어이 책을 앞에서부터 읽으면 컴퓨터 시스템을 bottom-up으로 설명한다. 그러나 각 장을 순서대로 읽지 않아도 된다. 컴퓨터 시스템을 구현할 때 가장 기본적인 원리는 '추상화, 모듈화'이다. 컴퓨터를 설계하는 사람은 ram 내부의 칩 하나하나에 있는 레지스터들이 '어떻게' 동작하는지 몰라도 된다. 그저 ram이라는 모듈이 '무엇을' 하는지 설명되어 있는 인터페이스를 보고 사용하면 된다. 사용해서 컴퓨터를 설계하면 된다. 하드웨어, 소프트웨어 개발자는 이 추상화-구현 패러다임을 통해 매우 크고 복잡한 컴퓨터 시스템을 모듈 단위로 잘 설계해서 구현과 오류 해결이 쉽고 복잡도가 낮은 시스템을 만들 수 있다.  고수준 프로그래밍 언어가 컴파일러에 의해 저수준 기계어로 번역되고, 기계어가 어셈블러에..

CS 2024.12.20