Study in SSAFY
[디자인 패턴] 프록시 패턴 / 이터레이터 패턴 / 노출모듈 패턴
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.1 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을, 객체 간의 상호 관계를 이용하여 해결할 수 있도록 '규약' 형태로 만든 것이다. 1) 프록시 패턴 대상 객체에 접근하기 전, 그 접근에 대한 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 이를 통해 객체의 속성, 변환 등을 보완할 수 있고 보안, 캐싱, 로깅, 데이터 검증에 사용한다. - 프록시 서버 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템 혹은 응용 프로그램이다. 2) 이터레이터 패턴 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴이다. 순회 가..
[디자인 패턴] 싱글톤 패턴 / 팩토리 패턴 / 전략 패턴 / 옵저버 패턴
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.1 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을, 객체 간의 상호 관계를 이용하여 해결할 수 있도록 '규약' 형태로 만든 것이다. 1) 싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통 데이터베이스 연결 모듈에 많이 활용된다. 하나의 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에, 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는 단점이 있다. 싱글톤 패턴은 TDD(Test Driven Developmenet)를 할 때 문제가 된다. TDD를 할 때 단위 테스트를 주로 하는데, 단위 테스트는 서로 독립적이어야 하며 어떤 순서로든 실행할 수 있어야 한..
[자료구조] 5.3. 비선형 자료 구조
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 5.3. 비선형 자료 구조 비선형 자료 구조란 일렬로 나열하지 않고, 자료 순서나 관계가 복잡한 구조를 말한다. 1) 그래프 그래프는 정점과 간선으로 이루어진 자료 구조를 말한다. 정점과 간선 ' 어떠한 곳에서 어떠한 곳으로 무언가를 통해 간다. ' 위에서 '어떠한 곳'은 정점(vertex)이고, '무언가'는 간선(edge)이 된다. 이와 같이 정점과 간선으로 이루어진 집합을 '그래프(graph)'라고 한다. 정점으로 나가는 간선을 해당 정점의 outdegree라고 하며, 들어오는 간선을 해당 정점의 indegree라고 한다. 또한, 간선과 정점 사이에 드는 비용을 '가중치'라고 한다. 2) 트리 트리는 그래프 중 하나로 ..
[자료구조] 5.2. 선형 자료 구조
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 5.2. 선형 자료 구조 선형 자료 구조란 요소가 일렬로 나열되어 있는 자료 구조를 말한다. 1) 연결 리스트 연결 리스트는 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극대화시킨 자료구조이다. 삽입과 삭제에 O(1), 탐색에 O(n)이 걸린다. 위와 같이 prev 포인터와 next 포인터로 앞과 뒤를 연결한 것이 연결 리스트이다. 연결 리스트는 다음과 같이 3가지 연결 리스트가 존재한다. 싱글 연결 리스트: next 포인터만 가진다. 이중 연결 리스트: next 포인터와 prev 포인터를 가진다. 원형 이중 연결 리스트: 마지막 노드의 next 포인터가 헤드 노드를 가리키는 이중 연결 리스트. 2) 배열 배열..
[자료구조] 5.1. 복잡도
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 5.1. 복잡도 복잡도는 시간 복잡도와 공간 복잡도로 나뉜다. 1) 시간 복잡도 문제를 해결하는 데 걸리는 시간과 입력의 함수 관계. 알고리즘의 로직이 얼마나 오랜 시간 걸리는지. 빅오 표기법*으로 나타냄. (빅오 표기법*: 가장 영향을 많이 끼치는 항의 상수 인자와 나머지 항을 없앤 것. 예를 들어 10n^2+n의 시간이면 O(n^2)로 표기한다.) 필요한 이유: 효율적인 코드로 개선하는 데 쓰이는 척도. 2) 공간 복잡도 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양. 정적 변수는 물론이고 재귀함수로 인해 동적인 공간을 계속해서 필요할 경우도 포함. int a[1005]; 위와 같은 코드를 예시로 들면, a 배열..
[이것이 자바다] 16.11 스트림과 병렬처리 - 수집(collect())
본 포스팅은 [이것이 자바다]의 내용을 참고하여 작성하였습니다. 16.11 수집: collect() 요소들을 필터링 또는 매핑한 후 수집하는 최종 처리 메소드. 필요한 요소만 컬렉션으로 담을 수 있다. 요소들을 그룹핑한 후 집계(리덕션)할 수 있다. 16.11.1 필터링한 요소 수집 collect(Collector collector) 메소드는 필터링 또는 매핑된 요소들을 새로운 컬렉션에 수집하여 리턴한다. 위의 매개값인 Collector(수집기)는 어떤 요소를 어떤 컬렉션에 수집할 것인지를 결정한다. Collector의 타입 파라미터 T는 요소, A는 누적기, R은 요소가 저장될 컬렉션이다. 풀어서 해석하면, T 요소를 A 누적기가 R에 저장한다 는 의미이다. 다음과 같이 다양한 정적 메소드를 이용하여 ..
[이것이 자바다] 12.6 멀티스레드 - 스레드 상태 제어
본 포스팅은 [이것이 자바다]의 내용을 참고하여 작성하였습니다. 12.6.1 주어진 시간동안 일시 정지: sleep() 실행중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep()을 사용하면 된다. 다음과 같이 Thread.sleep() 메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간다. try { Thread.sleep(1000); } catch(InterruptedException e) { // interrupt() 메소드가 호출되면 실행 } 매개값으로는 얼마 동안 일시 정지 상태로 있을 것인지, ms 단위로 시간을 주면 된다. 주어진 시간이 되기 전에 interrupt() 메소드가 호출되면 InterruptedE..
[이것이 자바다] 12.5 멀티스레드 - 스레드 상태
본 포스팅은 [이것이 자바다]의 내용을 참고하여 작성하였습니다. 스레드 객체를 생성하고 start() 메소드를 실행하면, 실행 대기 상태가 된다. (실행 대기 상태란, 아직 스케줄링이 되지 않아 실행을 기다리고 있는 상태를 말한다.) 실행 대기 상태에 있는 스레드 중에서 스레드 스케줄링으로 선택된 스레드가 CPU를 점유하고 run() 메소드를 실행한다. 이 때를 실행(Running) 상태라고 한다. 실행 상태의 스레드는 run() 메소드를 전부 실행하기 전에 스레드 스케줄링에 의해 다시 실행 대기 상태로 돌아갈 수 있다. 그리고 다른 드레스가 선택되어 실행 상태가 된다. 이러한 과정을 반복하며 스레드는 자신의 run() 메소드를 조금씩 실행하고, 실행된 상태에서 run() 메소드가 종료되면 더 이상 실행..