본문 바로가기

분류 전체보기

(295)
[디자인패턴] Bridge 패턴 설명 구현과 추상을 분리하여 독립적으로 존재하게 만든다. 확장성과 유연성이 좋다. 추상적 개념을 구체화하는 경우 상속을 이용할 수 있다. 이때 상속의 경우 하면 할수록 클래스가 구체적인 구현 사항에 종속되기 때문에 수정 및 확장이 어려워진다. 위 그림의 Paint를 생각해 보자. Paint는 도형들에 대한 가장 추상적인 인터페이스로, 도형을 화면에 그리는 draw 메서드를 정의한다. 구체적인 도형을 의미하는 Circle, Rectangle은 Paint 인터페이스를 구현함으로써 화면에 표현될 수 있으며, 이를 통해 모든 도형을 draw( )라는 일관된 메서드를 통해 그릴 수 있게 된다. 여기서 문제점이 되는 부분은 각 도형을 구체적으로 그리는 구현과 밀접하게 관계되는 OpenGL__, DirectX__ 클..
[nginx] Location Priority https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#nginx-location-priority https://serverfault.com/questions/674425/what-does-location-mean-in-an-nginx-location-block Configuring NGINX and NGINX Plus as a Web Server | NGINX Plus Configuring NGINX and NGINX Plus as a Web Server Configure NGINX and NGINX Plus as a web server, with support for virtual server multi-tenancy, URI and resp..
[디자인패턴] Singleton 패턴 설명 어떤 클래스는 프로그램 상에서 정확히 하나의 인스턴스만 존재하여, 해당 인스턴스가 자신과 관련된 모든 작업을 감독해야 하는 경우가 있다. 이 상황에서 단순히 static 전역변수를 하나 둬서 처리할 수도 있지만 싱글톤 패턴을 이용하여 클래스 자신이 static 변수를 관리하면서 단일 인스턴스를 보장할 수 있다. 일반적인 사용 방식은 다음과 같다. 생성자를 private ( 특이한 경우에는 protected ) 로 설정하여 클래스 외부에서 호출할 수 없게 만든다. 클래스 내부에 static private 인스턴스인 instance을 선언한다. public getInstance 함수를 통해 instance에 대한 접근 권한을 부여한다. 초기에 instance가 없다면 null 체크 후 instance을..
[typescript] 오버로딩 요점 타입스크립트에는 C++, Java 등 정적 타입 언어에 대응되는 함수 본문에 대한 오버로딩은 존재하지 않는다. 대신 함수에 대한 오버로드 시그니처(콜 시그니처)를 기반으로 오버로딩인 것 "처럼" 만들 수는 있다. 메서드 오버로딩 오버로딩은 이름은 같지만 입력 파라미터 타입 + 출력 형식이 다른 여러 개의 메서드를 중복 정의하는 것을 의미한다. 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다. 메서드의 이름이 같아야 한다. 애초에 이름이 같지 않으면 오버로딩이 아니다. 메서드의 입력 파라미터의 타입 또는 형식이 반드시 달라야 한다. 출력 형식은 같든 다르든 입력 파라미터 형식만 다르다면 상관없다. 예를 들어, 아래 코드는 오버로딩에 해당한다. int add(int a, int b) { ..
[디자인패턴] Adapter 패턴 설명 특정 클래스의 동작을 클라이언트가 원하는 형태로 변환, 인터페이스를 일치시킨다. 위 그림에서, 클라이언트는 Target 인터페이스 형태로 기존 기술인 Adaptee 클래스의 기능을 사용하고 싶다. 이때 Adaptee을 직접 Target에 맞게 수정하는 것은 매우 고단한 작업이며, 만약 레거시 기술이라면 여러 이유로 수정이 불가능할 수도 있다. 이러한 상황에서 외부 모듈 자체를 수정하는 대신 Adapter 클래스를 구현하여 Adaptee의 인터페이스를 Target의 인터페이스에 적응시킨다. Adapter 패턴은 기존 클래스 Adaptee을 사용하고 싶지만 인터페이스가 맞지 않는 경우, 이 상황에서 Adaptee 자체를 Target 인터페이스에 맞출 수는 없을 때 사용한다. 잘 유지보수 되고 있는 모듈..
[프로그래머스] 숫자 블록 https://school.programmers.co.kr/learn/courses/30/lessons/12923# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 길이가 1,000,000,000(10억) 인 블록 각각에 숫자를 부여하되, 다음 조건을 만족한다. 숫자의 범위는 1 ~ 10,000,000(1천만) 이다. 숫자 N은 2 * N, 3 * N ... 블록에 부여될 수 있으며, 작은 숫자에서 큰 숫자 순서로 블록을 덮어쓸 수 있다. 예를 들어 4번째 블록에 숫자 1이 부여되더라도, 이후 숫자 블록 2에 의해 갱신될 수 있다. 즉, 조건을 만족하는 경..
과제 수행용 글 과제로 인해 vmware을 사용하고 있는데, 버전이 너무 낮아서 그런지 복사 + 붙여넣기 기능이 지원되지 않는다. 다행히도 웹사이트는 사용할 수 있어서 현재 글에 코드를 올리고 복사할 예정이다. 아마 코드 출처: https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/ Buffer-Overflow Vulnerability Lab Overview The learning objective of this lab is for students to gain the first-hand experience on buffer-overflow vulnerability by putting what they have learned about the vulnerab..
[디자인패턴] Composite 패턴 설명 클라이언트 입장에서 개별적인 객체와 복합적인 객체를 동일하게 처리할 수 있도록 한다. Composite는 복합 객체로, 내부에 Component 추상 클래스를 상속하는 다른 객체들을 배열 등의 형태로 관리할 수 있다. 클라이언트는 복합 객체와 단일 객체의 구분 없이 동일하게 취급하며, 추상적인 Component라는 단위로 접근하게 된다. 구성 요소 Component: 모든 객체에 대한 인터페이스(추상 클래스)로, 객체들이 공통적으로 가지는 동작인 op 및 복합 객체에게 필요한 Add, Remove 등의 연산을 모두 정의하고 있다. 리프 노드들 입장에서는 Add, Remove 등 연산이 필요하지 않지만, 리스코프 교체 원리를 따라 단일 객체와 복합 개체 모두가 Component라는 인터페이스 아래에서..