Strategy Pattern? - 전략 패턴(Strategy Pattern) : 알고리즘군을 정의하고 각각을 캡슐화해서 실행중에 알고리즘을 선택할 수 있는 행위 패턴이다. * 한마디로, 행위 자체를 인터페이스로 선언하고 각각의 알고리즘은 클래스로 상속받아서 오버라이딩 하는 방식이다. * 조금 더 쉽게 말하자면, 행동 이름자체는 똑같지만, 내용을 다르게 하기 위해 사용한다!! Why 전략 패턴? * 알고리즘 자체가 랜덤(Random) 로직이 포함될 경우, 테스트가 불가능해지는 현상이 있다. -> 이를 해결하기 위해, 정적인 로직을 갖는 알고리즘과 랜덤 로직을 갖는 알고리즘을 분리하여 테스트한다! * 위 예시는 수많은 사례중 하나이고, 많은 인터넷 블로그들은 Fly 라는 인터페이스를 주로 예시로 하더라!!..
Total
Singleton? 왜 디자인 패턴을 쓰는지는 링크를 참조해주세요! - Singleton(싱글톤) 패턴 : Application에서 Instance를 하나만 만들어 사용하기 위한 패턴이다. - 외부에서 객체를 생성하는 것을 막기 위한 패턴 - Use Case는 DB에 연결할 때, jdbc 라이브러리를 통해서 연결하는데 중복 Connection은 피하기 위해서 사용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package pattern; public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance ..
디자인 패턴? - Design Pattern(디자인패턴) : 각기 다른 소프트웨어 모듈이나 기능을 가진 응용 소프트웨어를 개발할 때 공통되는 설계 문제를 해결하기 위한 공통된 패턴 그러니까,, 바퀴가 있는데 왜 바퀴를 다시 만들고 있냐? * 우리는 프로그래머니까 효율적인 방식을 택하자! Why,, 디자인 패턴???? - 같은 문제에 대해서는 똑같은 설계법을 사용해서 다른 개발자와 의사소통을 원활하게 하고, 쉽게 개발하자! - 개발자마다 코딩 방식이 다른데, 협업을 위해서는 우리들만의 표준이 필요하다!! - 제발 코드를 작성할 때 읽기 좋게 작성해주세요ㅠㅠ 디자인 패턴 구조 1. Context - 패턴이 적용될 수 있는 상황을 나타낸다. - But, 경우에 따라서는 패턴이 유용하지 못한 상황이 나올 수도 ..
* 본 포스팅은 지극적으로 개인적 견해임을 사전에 알립니다. 읽게 된 이유? 필자가 TDD를 연습하던 도중 굉장히 혼란스러웠던 적이 많았다. TDD에 대한 설명은 해당 링크 TDD는 테스트 코드를 짜고, 컴파일 되지 않게 프로덕션 코드를 완성하고, 다시 리팩토링하는 과정이다. 하지만 굉장히 큰 난관에 봉착했다. 도대체 뭘 테스트 해야 되지????? 필자가 지금까지 해온 프로그래밍 절차는 필드값을 가지는 객체를 정의한다. 객체를 설계한다. 테스트 케이스에 대한 모든 예외 처리 코드를 작성한다. 그러다 보니, 되게 많은 의문점이 들었다. 생성자를 테스트하는 것인가? 필드 변수에 List가 있으면, List에 add 되는 것을 테스트하는 것인가? 필드 변수에 제대로 저장이 되는지 테스트하는 것인가? 인스턴스의..
벨만포드(Bellman-Ford) - 그래프 상에 존재하는 두 노드간의 최단거리를 구할 때 사용하는 알고리즘 - Dijkstra 알고리즘과의 차이점은 음의 가중치를 포함할 때 사용가능하다는 점! - 간선(Edge)의 개수와 노드(Vertex)의 개수에 따라 유동적으로 알고리즘을 사용해야 된다! 전제조건 1. 최단 경로는 사이클을 포함하지 않는다. 따라서 |V| - 1 개의 간선만 사용할 수 있다! 2. 최단 경로가 업데이트 되는 노드가 없어질 때까지 반복해서 구한다! 3. 만약 무한히 업데이트 한다면 이는 조건에 맞지 않으므로 불가능으로 탈출한다! * 고찰 - 매 라운드마다 모든 Edge를 검사하고, |V| - 1의 라운드 동안 전체 Edge |E|개를 검사하므로 - 시간복잡도는 O(|V||E|), |E..
Hash? - Hash Function : 해시 함수는 임의의 문자열을 받아서 고정 문자열로 바꾸어주는 함수다! 이때 서로 다른 문자열에 대하여 같은 고정 문자열이 될 수 있는데, 이러한 경우는 해쉬 충돌이라고 한다! H(s1) = H(s2) - 따라서 많은 공간을 낭비하게 된다! Why? 해쉬 값이 어떻게 나올지 모르니까! - 그럼에도 불구하고!! 우리는 메모리를 버리고 시간을 산 셈이다! - 일반적으로 데이터를 조회할 때 배열은 O(n)이지만 잘 만든 Hash의 경우 O(1)의 조회가 가능하다 public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value..