비슷한 동작을 하지만 다르게 구현되어 있는 행위(전략)들을 공통의 인터페이스를 구현하는 각각의 클래스로 구현하고, 동적으로 바꿀 수 있도록 하는 패턴이다. 동일 계열의 알고리즘군을 정의하고 각각의 알고리즘을 캡슐화하여 이들을 상호 교환이 가능하도록 만든다. 장점 클라이언트는 인터페이스를 통해 알고리즘을 사용하므로, 실행 중에 다른 알고리즘으로 교체하는 것이 쉬워 애플리케이션의 유연성과 확장성이 증가 각각의 알고리즘을 독립적인 클래스로 구현하기 때문에, 코드를 재사용이 용이 전략 클래스를 인터페이스를 통해 분리하여 개별적으로 테스트 가능 알고리즘을 사용하는 클라이언트와 상관 없이 독립적으로 알고리즘 변경이 가능 단점 각각의 알고리즘을 독립적인 클래스로 구현해야 하므로, 전략의 개수가 많을 경우 클래스의 수..
💻dev/🖥️CS
COALESCE 함수는 인자로 주어진 컬럼들 중에서 NULL이 아닌 첫번째 값을 반환하는 SQL 함수입니다. 이해를 돕기 위해 간단한 예를 들어보겠습니다. CREATE TABLE Orders ( OrderID INT PRIMARY KEY, ProductName VARCHAR(255), Quantity INT, DiscountedPrice DECIMAL(10,2) ); 일단 Orders 테이블을 생성합니다. INSERT INTO Orders (OrderID, ProductName, Quantity, DiscountedPrice) VALUES (1, 'Apple', 10, NULL), (2, 'Banana', 20, 18.50), (3, 'Cherry', 30, NULL), (4, 'Doll', 40, 12..
구직활동을 하느라 블로그에 너무 소홀했다. 기술 면접은 준비하면 할수록 끝이 없지만 그만큼 또 배우는 것도 많은 것 같다. (특히 꼼꼼하게, 디테일하게 질문해주시는 면접관님들 감사합니다!) 나도 많은 블로그/깃허브의 도움을 받았기에 내가 정리한 부분도 공유해본다. Q. 프로그램을 메모리에 로드할 때, 사용되는 메모리 내부 영역을 크게 코드영역, 데이터영역, 스택영역, 힙영역으로 나뉨 코드 영역 프로그램의 실행 코드가 저장되는 영역 CPU는 코드 영역에 있는 명령들을 하나씩 가져와 실행 일반적으로 읽기 전용이기 때문에 프로그램이 실행되는 동안 그 내용이 바뀌지 않음 데이터 영역 초기화된 전역 변수와 정적 변수가 이 영역에 저장 예를 들어, int global_var = 10;과 같은 전역 변수 프로그램의 ..
CPU 스케줄러와 스케줄링 알고리즘 CPU 스케줄러 장기스케줄러(Long-term scheduler or job scheduler) 메모리와 디스크 사이의 스케줄링을 담당. 프로세스에 memory(및 각종 리소스)를 할당(admit) degree of Multiprogramming 제어 (실행중인 프로세스의 수 제어) 프로세스의 상태 new -> ready(in memory) 단기스케줄러(Short-term scheduler or CPU scheduler) CPU 와 메모리 사이의 스케줄링을 담당. Ready Queue 에 존재하는 프로세스 중 어떤 프로세스를 running 시킬지 결정. 프로세스에 CPU 를 할당(scheduler dispatch) 프로세스의 상태 ready -> running -> w..
Design Pattern 디자인 패턴 소프트웨어 코드 작성 시에 생기는 공통적인 문제를 해결하는데 도움이 되는 코드 패턴으로 SW 재사용성, 호환성, 유지 보수성을 보장한다. 객체지향 설계 원칙(SOLID) Single Responsibility Principle(단일 책임 원칙): 하나의 클래스는 하나의 역할만 해야 함 Open - Close Principle(개방-폐쇄 원칙): 확장(상속)에는 열려있고, 수정에는 닫혀있어야 함 Liskov Substitution Principle(리스코프 치환 원칙): 자식이 부모의 자리에 항상 교체될 수 있어야 함 Interface Segregation Principle(인터페이스 분리 원칙): 인터페이스가 잘 분리되어서 클래스가 필요한 인터페이스만 구현하도록 해..
Operating System 운영체제 정의 하드웨어(CPU, 메모리, 디스크 등) 관리 응용 프로그램과 하드웨어 사이에서 인터페이스 역할을 하는 시스템 소프트웨어 프로세스 vs 스레드 프로세스 실행중인 프로그램으로 OS로부터 주소 공간, 파일, 메모리 등을 할당받아 실행, 코드/데이터/스택/힙 메모리 영역을 가짐 스레드 프로세스의 독립적인 실행 단위로 프로세스로부터 자원을 할당받아 실행, 프로세스의 코드/데이터/힙 메모리 영역을 공유하고 개별적인 스택을 가짐 cf. Java-Thread: JVM에 의해 스케쥴되는 실행 단위 코드 블럭 스레드가 개별적인 스택을 가지는 이유? 스택에는 함수 호출 시의 전달인자, 지역 변수, 되돌아갈 주소 등을 저장 독립적인 스택을 갖는 것은 독립적인 함수 호출이 가능하고 ..
REST(Representational State Transfer) API 소프트웨어 프로그램 아키텍처의 한 형식 웹의 모든 자원에 고유한 ID인 HTTP URI 를 부여 Client Side를 정형화된 플랫폼이 아닌 모바일, PC, 어플리케이션 등 플랫폼에 제약을 두지 않는 것을 목표 HTTP URI를 통해 자원을 명시하고, HTTP Method (POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD OPERATION을 적용하는 것을 의미 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일 특징: a. 클라이언트 / 서버 구조 : 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역활이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동할 수 있게..
고민의 시작 개발자라면 누구나 고민하는 지점이 있다. 바로 '좋은 코드'에 대해서이다. 학부 수업을 들을 때도, 회사를 다닐 때도 '좋은 코드'를 작성해야 한다는 이야기를 수없이 들었고, 또 그러고 싶었다. 하지만 그 '좋은 코드'란 대체 무엇인가? 나는 그 질문에 대한 답이 '좋은 사람', '좋은 개발자' 만큼 폭넓은 기준을 가졌다고 생각한다. 그래서 여러 자료를 참고하여 '백엔드' 개발자 입장에서의 관점을 적어보려 한다. 좋은 코드란 무엇일까? 일단 '좋은 코드'에는 수많은 정의가 있다. 읽기 쉬운 코드, 테스트가 용이한 코드, 오류가 없는 코드, 짧은 코드, 중복이 없는 코드 등등. 프로그램의 목적 혹은 개인의 취향 등 다양한 관점에서의 정의가 있다. 그래서 구글링...을 하면 좀 식상하니까 Cha..