일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스케줄링
- DirectX 12
- 락
- 운영체제
- 파일시스템 구현
- 병행성 관련 오류
- OS
- Direct12
- 영속성
- 멀티쓰레드
- codility
- DirectX12
- 그리디 알고리즘
- 렌더링 파이프라인
- 쓰레드
- 프로그래머스
- 동적계획법
- I/O장치
- 병행성
- 그리디알고리즘
- 멀티프로세서
- 다이나믹 프로그래밍
- 컨디션 변수
- 타입 객체
- 알고리즘
- 디자인패턴
- 자료구조
- 다이나믹프로그래밍
- 백준
- directx
- Today
- Total
목록전체 글 (500)
기록공간
여러 고심끝에 깃허브 블로그로 새출발하게 되었습니다. 부족하지만, 앞으로는 더 열심히 제대로 된 포스팅을 해보도록 하겠습니다. 감사합니다. https://lipcoder.github.io Lipcoder’s Blog A minimal, responsive, and powerful Jekyll theme for presenting professional writing. lipcoder.github.io
싱글턴이란? 싱글턴이란 디자인 패턴에서 생성 패턴 중 하나로 오직 하나의 인스턴스만 생성하도록 약속하는 패턴이다. 보통 싱글턴 패턴은 무상태(Stateless) 객체나 시스템 객체같 유일해야 하는 객체를 생성하는데에 사용된다. 싱글턴 패턴의 한계는 그 특성에서도 알 수 있다. 하나의 인스턴스만 생성 가능 하다는 특성 말이다. 싱글턴을 사용하려는 클라이언트를 테스트하기가 어려워 질 수 있다. 왜냐하면 테스트를 위한 가짜(mock)객체를 구현하는 것으로는 싱글턴을 대체 할 수 없기 때문이다. 싱글턴 생성 방법 첫번째 방법은 public 정적 final 멤버변수를 사용하는 방법이다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); ..

일반적인 개발환경은 아래 그림과 같이 나뉘어 진다. 각각 개발 과정에 따라, 각자의 역할과 목적이 다르고, 그에 따른 시스템의 크기도 다르다. 꼭 모든 환경을 갖출 필요는 없기 때문에, 프로젝트에 따라서 각 환경을 합치거나 생략해도 된다. 각 환경에 대한 설명 로컬 개발 환경(Local) 개발을 하기에 앞서, 개발자 개개인의 PC에 개발 및 테스트 환경이 셋업되어 있어야 한다. 각 개발자마다, 설치된 서버 환경을 로컬 개발 환경이라고 한다. (ex. 각 PC에 MySQL(DB)과 Tomcat 등의 소프트웨어를 설치하고, Eclipse와 같은 통합 개발 환경(IDE)과 컴파일러 등이 설치된 환경) 로컬 개발 환경을 구축할시 가장 주의해야 할 점은 모든 개발자가 같은 개발 환경을 사용해야 한다는 것이다. 실..

인터넷 통신 HTTP도 결국 인터넷 망을 통해서 동작하기 때문에 인터넷 통신에 대해서 알 필요가 있다. 다음과 같이 두 개의 컴퓨터가 있다. 둘은 어떻게 통신을 하게 되는 걸까? 메시지를 주고받고 싶을 경우 선이 연결되어 있다면 단순하게 그냥 통신하면 될 것이다. 하지만 이게 인터넷을 통해야 한다면 말이 달라진다. 인터넷 망은 단순히 선 하나를 통해 통신할 수 없다. 인터넷에 연결된 컴퓨터는 수없이 많고, 목적지까지의 거리도 엄청나게 멀 수 있기 때문이다. 인터넷 망은 매우 복잡하다. 인터넷 안에 수많은 노드들이 선을 통해 서로 연결되어 있다. 이 선은 해저를 통하는 광케이블이 될 수도 있고, 심지어는 위성을 통할 수도 있다. 그러면 이렇게 수많은 노드들을 거쳐서 목적지까지 도착하는 험난한 여정(?)을 ..
개요 소프트웨어 공학(Software Engineering)은 소프트웨어를 개발하는데 있어서 필수적인 요소이다. 이를 전혀 고려하지 않고 무작정 개발에 뛰어들면 실패할 가능성이 매우 높다. 실제로 프로젝트에 대한 상세를 대충 구상하고 개발을 시작하면, 얼마안가 생각했던 방향과는 다른 방향으로 흘러간다. 이미 진행된 상황에서 이를 되돌리기는 매우 어렵다. 대규모 프로젝트를 진행하는 기업이 이런 상황이 발생하게 된다면 매우 큰 경제적, 시간적 손실이 발생한다. 이를 사전에 방지하고 좋은 소프트웨어를 효율적으로 개발하기 위해서는 소프트웨어 공학은 매우 중요하다. 소프트웨어를 개발하는 방법 중 하나인 애자일(Agile) 기법은 많은 유명 기업에서 채택하는 방법이다. 이러한 기업들이 왜 애자일 기법으로 개발하는지..
정적 팩터리 메서드 혹은 생성자에는 서로 공통적인 제약이 하나 있다. 선택적 매개변수가 많을 경우 적절히 대응이 어렵다는 것이다. ex) 영양정보는 20개가 넘어가지만, 대다수의 값이 0인 경우 이를 해결하기 위해 여러 대안이 있는데, 한번 살펴보도록 하자. 점층적 생성자 패턴 (Telescoping Constructor Pattern) 매개변수를 점층적으로 받을 수 있게 생성자를 구성하는 것이다. 필수 매개변수만 받는 생성자 필수 매개변수 선택 매개변수 1개 받는 생성자 선택 매개변수 2개 받는 생성자 ... public class NutritionFacts { private final int servingSize; // 1회 제공량 필수 private final int servings; // 총 n회..
인스턴스를 얻을 수 있는 전통적인 수단 ==> 생성자(Constructor) 하지만, 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공한다. - 래퍼 클래스 Boolean에서 발췌한 간단한 예 // static(정적) // valueOf(메서드) public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 정적 팩터리 메서드 장점 1. 이름을 가질 수 있다. 생성자 자체 만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 하지만 정적 팩터리 메서드는 메서드명을 잘 짓는다면 객체의 특성을 쉽게 묘사할 수 있다. 기본 생성자 => BigInteger(int, int, Random) 정적 팩터리 메서드 => Bi..

Proxy 프록시 서버는 클라이언트를 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있도록 해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에서 대리로 통신을 수행하는 것을 가리켜 프록시라고 하며, 이 프록시 기능을 하는 서버를 프록시 서버라고 부른다. 일부 프록시 서버는 서버로부터 요청받은 내용들을 캐시에 저장해둔다. 이를 캐슁이라고 한다. 프록시는 크게 포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)로 나뉜다. Forward Proxy 포워드 프록시는 클라이언트와 인터넷 사이에 위치하며, 클라이언트의 요청을 대신 받아 이를 서버로 요청하고 받은 결과를 다시 클라이언트에 전달해준다. 프록시 서버는 캐시를 사용하여 자주 사용된 컨텐츠는 요청..