Archive: 2021

4. 팩토리 패턴

Circle c = new Circle(origin, 1);이 코드는 DIP를 위반한다. 구체 클래스에 의존하기 때문이다. 사실 new 키워드를 쓰는 순간 구체 클래스에 의존하게 되며 해당 구체 클래스의 변경에 취약해진다. 다만 해당 구체 클래스가 쉽게 변경되지 않는다면 큰 문제가 되지 않을 수 있다 팩토리 패턴을 사용하면 추상 인터페이스에만 의존해서 구체

17. Backtracking 활용 - Subste Sum 문제

Subset sum주어진 집합의 부분집합의 원소 합이 특정 값이 되는 조건을 만족하는 집합을 찾아내는 문제.모든 집합을 찾아보는 건 2^n개임 DP로 푼다면?(안좋은 예시) 어떤 숫자가 포함될 경우와 그렇지 않은 경우를 모두 재귀적으로 표현 123456789subsetSum(A, i, S): #A는 배열, i는 포함 여부를 살펴보는 수의 인덱스 , S는

5. Class 클래스

Class 클래스자바의 모든 클래스, 인터페이스는 .class 파일로 저장됨Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적으로 로딩하고, 정보를 가져오는 메서드 제공 Class.forName(“클래스 이름”) 메서드로 클래스를 동적으로 로드 클래스 이름으로 직접 가져오기 인스턴스에서 가져오기1234567//1.Class c = Cla

4. 추상 클래스, 인터페이스

추상 클래스구현 코드 없이 메서드 선언만 있는 추상 메서드를 포함한 클래스추상 클래스는 new 할 수 없음(인스턴스 생성 불가)추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현 인터페이스구현된 메서드가 없는 것(디폴트 메서드와 정적 메서드로 일부 구현된 메서드 존재 가능) 디폴트 메서드는 구현한 클래스들이 모두 공통적으로 갖게되는 메서드(오버라이딩

3. 다형성, 상속, 결합, 다운 캐스팅

다형성하나의 코드가 여러 자료형으로 구현되어 실행되는 것.같은 코드에서 상황에 따라 다른 결과가 반환.상위 클래스에서 공통 부분을 구현하고, 하위 클래스에서 각 클래스에 맞는 기능 구현여러 클래스를 하나의 타입(상위 클래스)로 핸들링 가능 상속은 언제 사용할까IS-A관계(inheritance, 상속) 일반적(상위) vs 구체적(하위) 관계 상위 클래스 수정

3. 데코레이터 패턴

데코레이터 패턴동적으로 객체에 부가적인 책임을 더하는 패턴.상속으로 확장하는 것이 아닌, 객체들의 결합으로 역할을 확장한다.특히 원본 코드에 영향을 주지 않고 기능을 추가할 수 있다!!!하지만 각 데코레이터마다 클래스를 만들어줘야 한다. 그래서 같은 기능을 서로 다른 여러 클래스에 적용하려면 매번 새로운 클래스를 만들어 줘야 한다.(이를 해결하기 위한 동적

2. 옵저버 패턴

옵저버 패턴하나의 객체(서브젝트)가 변할 때, 자동으로 다른 여러 객체들(오브젝트)에게 영향을 동적으로 반영하는 일대다 관계 패턴이때 여러 오브젝트가 추가 될 수 있어야 한다. 배울 내용 요약 1. 서로 상호작용하는 객체들은 느슨하게 연결되어야 한다. 예제로 알아보자. NBA사무국에서는 선수들의 정보를 관리하고 있다.NBA방송국 NBC, TNT에서는

1. 전략 패턴

전략 패턴변경 가능하고 독립적인 알고리즘의 구성으로 만든 패턴 특징 특정한 계열의 알고리즘을 정의 각 알고리즘을 캡슐화 이 알고리즘들을 해당 계열 안에서 상호 교체 가능 배울 내용 요약 1. 다양하게 변화할 법한 내용은 캡슐화하자.2. 구현이 아닌 인터페이스로 프로그래밍하자.3. 상속보다는 구성(IS-A, HAS-A, 구현을 구분하라) IS-A

11. 가상 메모리와 페이징 시스템, 세그멘테이션 기법

가상 메모리실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있음.(리눅스는 하나의 프로세스가 4기가를 차지함) 적은 메모리에서 여러 프로세스를 다루기 위해 등장한 개념이 가상 메모리! cpu가 한 프로세스의 모든 영역을 사용하지는 않는다,프로세스가 모두 4기가 씩을 부여 받더라도, 정작 사용하는 공간은 제한적이다.사용할 영역만 R

16. Backtracking

Backtracking답이 x1, x2, x3… 이런 형식으로 도출되는 문제에서, 유효한 답을 모두 찾는 경우 사용되는 알고리즘 기법 x1부터 차례대로 결정하면서 만약 어느 순간 조건에 맞는 답을 도출 못하는 상황에 마주하면,그 전 단계로 돌아가 다른 선택지로 다시 답을 찾아가는 방법이다. 이 기법은 굳이 더 알아보지 않아도 되는 경우를 확인하지 않도록 설

15. 그리디 알고리즘 활용 - 허프만 코딩

허프만 코딩 문제(Huffman coding problem)아스키 코드 : 알파벳과 문자들을 0~255개의 숫자로 배정한 것. 즉 8bit로 표현.이렇게 표현된 8비트의 비트들을 고정길이코드(fixed-length code)라고 한다.(문자열 100개면 800비트가 필요하게 된다.) 이때 a e i o u 같은 모음들은 빈도수가 높고 q z y는 빈도수가

14. 그리디 알고리즘

그리디 알고리즘현재 상태에서 가장 좋은 선택을 반복해서 해를 구성하는 알고리즘 문제는 이 그리디 알고리즘을 통해 얻은 해가 진짜 최선의 선택으로 얻은 해이냐는 것인데,이를 증명하기 위해서는 귀류법을 통해 증명해봐야 한다. 즉 우리가 찾은 해가 해가 아님을 가정으로 하여 다른 해를 가정하여,그 해를 논리적으로 추론하여 모순을 찾아내면, 우리가 찾은 그리디는

10. 쓰레드

ThreadLigth Weight Process라고도 하는 데, 프로세스와 비슷하지만 프로세스보다 가벼운 존재다. 프로세스 : 프로세스끼리는 서로 데이터에 접근 불가스레드 : - 하나의 프로세스 안에서 여러 스레드 생성 가능 - 스레드들은 동시에 실행 가능 - 프로세스 안에 있으므로 해당 프로세스 데이터를 모두 접근 가능 쓰레드는 어떤 프

9. 프로세스 구조와 프로세스간 커뮤니케이션

프로세스 구조프로세스 구조는 4가지 영역으로 나뉜다. 스택 : 최상단 스택 주소를 가리키는 EBP, 함수 결과를 반환해줄 주소(return address), 함수와 관련된 인자나 변수를 저장하는 영역 힙 : 동적으로 할당된 메모리를 저장하는 영역. (ex. malloc) 이 영역의 메모리 주소를 통해 힙에 저장된 내용을 다른 영역에서 사용! 데이터 : 선

13. 다이나믹 프로그래밍-3(LCS 문제)

LCS(최장공통부문자열) 문제부문자열은 문자열에서 0개 이상의 문자를 제외하고 남은 문자열을 의미YANG에서 A를 제외한 YNG같이… 하지만 AGY는 안된다! 공통 문자열은 두개의 문자열의 부문자열이 동일한 것을 말한다!이 문제는 가장 긴 길이의 공통부문자열을 찾는 문제이다! Xn 을 x1, x2, x3, … xn 즉 n개의 글자를 갖는 문자열이라고 하고,

8. 선점형 스케쥴러와 인터럽트

선점형 스케쥴러하나의 프로세스가 다른 프로세스 대신에 프로세서(cpu)를 차지할 수 있다!어떤 프로세스가 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체가능! 비선점형 스케쥴러하나의 프로세스가 끝나지 않으면 다른 프로세스는 cpu 사용할 수 없음…자발적으로 wait으로 되거나, 혹은 실행이 끝났을 때만 다른 프로세스로 교체 가능!즉 c