목록분류 전체보기 (114)
suyeonme
상속(Inheritance) 상속의 특징 코드를 재사용하여 중복을 줄일 수 있다. 따라서 유지보수가 쉬워진다. 상위 클래스와 하위 클래스가 is-a관계일 때 사용한다. (e.g. 동물 > 포유류 > 강아지) public class Mammals extends Animal { protected void breath() { ... } protected void birth() { ... } } 상속의 단점 상속은 단일 패키지에서 사용해야만 안전하다. 상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드) 상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문) 조합(Composition) 상위 클래스를 상속하는 대신에 상위 클..
최소 지식 원칙(Principle of Least Knowledge)이란? 최소 지식 원칙에 따르면 객체 사이의 상호작용은 될 수 있으면 아주 가까운 '친구'사이에만 허용하는 편이 좋다. 즉 상호 작용하는 객체들은 다른 객체가 어떤 상태를 갖고 있는지 속사정을 몰라야한다. 여러개의 dot(.)을 사용하지 말라는 법칙으로 많이 알려져있다. * 데메테르 법칙(Law of Demeter), Don't talk to strangers(낯선이에게 말하지 마라) 모두 같은 의미이다. 최소 지식 원칙은 객체 지향 프로그래밍에서 기본적이지만 중요한 개념이다. 최소 지식 원칙을 준수할 경우, 여러 클래스가 복잡하게 얽혀있어서 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야하는 상황을 방지할 수 있다. 최소 ..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 어댑터 패턴(Adapter Pattern)이란? 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와준다. 어댑터 패턴의 특징 어댑터를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(composition)을 사용한다. 이러한 접근법은 어댑티의 모든 서브 클래스에 어댑터를 쓸 수 있다는 장점이 있다. 클라이언트를 특정 구현이 아닌 인터페이스에 연결한다. 서로 다른 백엔드 클래스로 변환시키는 여러 어댑터를 사용할 수도 있다. 이렇게 인터페이스를 기준으로 코드를 작성하기에 타깃 인터페이스만 유지한다면 나중에 다른 구현을 추가하는 것이 가능하다. 클라이언트에서 어..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 커맨드패턴(Command Pattern)이란? 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있다. 이러한 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있다. 커맨드 패턴 활용 예시 1. 스케줄러, 스레드 풀, 작업 큐와 같은 작업에 사용할 수 있다. 작업 큐를 예시로 들면, 큐 한쪽 끝은 커맨드를 추가할 수 있고, 다른 쪽 끝에는 커맨드를 처리하는 스레드들이 대기하고 있다. 각 스레드는 우선 execute()를 호출하고 호출이 완료되면 커맨드 객체를 버리고 새로운 커맨드 객체를 가져온다. 작업 큐 클래스는 계산 작업을 하는 객체들과 완전히 분리돠어 있다. 큐에 커맨드 패턴을 구현하는 객..
해시법(Hashing)이란? 데이터를 저장할 위치(index)를 간단한 연산으로 구하여 검색, 추가, 삭제를 효율적으로 수행한다. 해시 함수(Hash Function) 키값을 해시값(hash value)로 변환하는 과정을 해시 함수라고 한다. 충돌을 피하려면 해시 함수는 해시 테이블 크기 이하의 정수를 한쪽으로 치우치치 않도록 고르게 만들어야한다. 해시 테이블 크기는 소수(prime number)가 좋다고 알려져있다. 해시 테이블을 만드는데 사용되는 대표적인 해시 함수 목록이다. 키값이 정수(integer)인지에 따라서 해시 함수가 달라진다. Digit Folding: 각 Key의 문자열을 ASCII 코드로 바꾸고 값을 합한 데이터로 해시를 생성하는 방법 Multiplication Method: 숫자로 ..
트리(Tree)란? 데이터 사이의 계층 관계를 나타내는 자료구조이다. 트리를 구성하는 요소는 노드(node)와 가지(edge)이다. 각각의 노드는 가지로 연결되어있다. 그래프(Graph)의 여러 구조 중 무방향 그래프의 한 구조이다. 하나의 데이터 뒤에 여러개의 데이터가 존재할 수 있는 비선형 구조이다. (선형 구조: 데이터를 순차적으로 나열) 트리 구조는 계층적으로 표현이 되고, 아래로만 뻗어나가기 때문에 사이클(cycle)이 없다. 트리를 사용한 대표적인 예시로, 파일 시스템(File System)이 있다. 파일 시스템에서 폴더는 루트 폴더에서 시작되어 가지를 뻗어나가는 모양을 한다. 트리 관련 용어 용어 설명 루트(root) 트리의 가장 윗부분에 위치하는 노드로, 하나의 트리에는 하나의 루트가 존재..
리스트(List)란? 데이터를 순서대로 나열한 자료구조이다. 선형 구조를 갖는 리스트에는 선형 리스트(linear list)와 연결 리스트(linked list)가 있다. 리스트에 있는 개별 요소를 노드(node)라고 한다. 노드의 구성 요소는 데이터와 다음 노드를 가리키는 포인터이다. 선형 리스트(Linear List) 데이터가 배열처럼 연속하는 메모리 공간에 저장되어 순서를 갖는다. 연결 리스트(Linked List) 데이터가 메모리 공간에 연속적으로 저장되어있지 않더라도 각각의 데이터안에 다음 데이터에 대한 정보를 갖고 있어 서로 연결(linked)된다. 연결 리스트의 구성 요소 머리 노드(head node): 리스트의 처음에 있는 노드 꼬리 노드(tail node): 리스트의 끝에 있는 노드 앞쪽..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 1. 싱글톤 패턴(Singleton Pattern)이란? 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공하는 디자인 패턴이다. 스레드 풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정을 처리하는 객체, 로그 기록용 객체, 디바이스 드라이버등에 주로 사용된다. 1.1 전역 변수 vs 싱글톤 전역 변수에 객체를 대입하면, 애플리케이션이 시작될 때 객체가 생성된다. 만약 객체가 자원을 많이 사용할 경우, 그리고 해당 객체가 사용되지 않으면 불필요하게 자원을 낭비할 수 있다. 2. 멀티스레딩을 고려하지 않은 싱글톤 간단하지만, 멀티스레드 환경에서는 문제가 발생할 수 있다. 생성자를 private으로 선언했으므로 Singleton에서만 클..