분류 전체보기

· Architecture
유명한 패턴들은 프로그래머들이 당연하게 사용하는 코딩 스타일들이 관습화 된 것일 뿐, 특별하거나 엄청난 개념이 아니다. 어댑터 패턴 또한 그렇다. 다음 그림처럼 콘센트에 코드를 꽂는 경우, 별다른 어댑터가 필요하지 않다. 하지만 외국에 나가게 되면 이런 어댑터가 필요한 경우가 있다. 어댑터 패턴이란.. 바로 이 어댑터를 만드는 행위를 말한다. 프로그래머가 코딩을 하다가 어댑터가 필요한 경우가 뭐가 있을까? 자바 프로그래밍을 예로 들자면, 기존 코드와 다른 인터페이스를 구현하는 클래스를 사용해야 하는 경우 인터페이스가 다르기 때문에 어댑터가 필요하다. (인터페이스가 다른데 막 가져와서 쓸 수는 없지 않은가) 말도 안되는 예를 한 번 들어보겠다. 위에 그림을 보면 K2는 gun 인터페이스를 구현하고 있고 K..
많은 클래스가 하나 이상의 자원에 의존한다. 가령 맞춤법 검사기는 사전(dictionary)에 의존하는데, 이런 클래스를 정적 유틸리티 클래스로 구현한 모습을 드물지 않게 볼 수 있다. // 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다 public class SpellChecker { private static final Lexicon dictionary = ...; // 인스턴스화 방지 private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } // 비슷하게 싱글턴을 잘못 사용한 예 public class Spel..
인스턴스화를 막으려거든 private 생성자를 사용하라. 이따금 단순히 정적 메서드와 정적 필드만을 담은 클래스가 필요할 때가 있다. 예를 들어 java.lang.Math와 java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓거나 java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수도 있다. 또한 final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문이다. 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한게 아니기 때문에 기본 생성자가 자동으로 생성되지 않도록 해야 한다. 해당 클래스를 추상 클래스로 만드는 것으로는 인스턴스화를 만들 수 없다. 하위 클래스를 만..
싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 타입을 인스턴스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(Mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 둘 중 하나다. 일단 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. public static final 필드 방식의 싱글턴 public class El..
· CS
IP 인터넷 프로토콜의 역할 지정한 IP 주소(IP Address)에 데이터 전달 네트워크의 노드들은 고유한 IP를 부여받는다 패킷(Packet)이라는 통신 단위로 데이터 전달 IPv4란? TCP/IP에서 활용하는 네트워크 주소체계이다. 네트워크 주소를 총 32 비트로 표현하기 때문에 약 43억 개의 주소를 나타낼 수 있다. IPv4 주소는 이미 모두 소진되었다. 이를 대체할 IPv6가 있다. IPv4 패킷(데이터그램) 구조 20~60 바이트의 크기를 가진 헤더(Header)와 그 뒤에 데이터(Data, Payload)가 담긴다. 헤더에는 라우팅과 데이터그램 전달을 위한 정보가 담기고 데이터에는 전달하고자 하는 정보가 담긴다. IPv4 헤더 구조 VER : 인터넷 프로토콜 버전을 의미한다. HLEN : ..
힙 정렬을 공부하기 전에 힙(Heap)이 무엇인지 알아야 한다. 그리고 힙을 알기 전에는 이진트리(Binary Tree)에 대해서 알고 있을 필요가 있다. 이진 트리는 모든 노드의 자식 노드가 2개 이하인 노드이다. 이진트리로 완전 이진트리를 구성할 수 있는데 별 다른 것은 아니고 이진트리의 노드가 중간에 비어있지 않고 빽빽이 가득 찬 구조를 완전 이진트리라고 한다. 즉 아래도 완전 이진트리라고 할 수 있다. 이제 힙을 알아보자. 힙은 최솟값이나 최댓값을 빠르게 찾아내기 위해 완전 이진 트리를 기반으로 하는 트리이다. 힙에는 최대 힙과 최소 힙이 존재하는데 최대 힙은 부모 노드가 자식 노드보다 큰 힙이라고 할 수 있고 최소 힙은 그 반대이다. 그런데 힙 구조 안에서 특정 노드 때문에 최대 힙 구조가 붕괴..
@xftg77g
'분류 전체보기' 카테고리의 글 목록 (14 Page)