분류 (61) 썸네일형 리스트형 전략패턴 헤드 퍼스트 디자인 패턴(개정판)을 공부하며 정리하는 내용입니다. 전략패턴 디자인 원칙 중 첫번째 원칙은 "애플리케이션에서 변하는 부분을 찾고 변하지 않는 부분과 분리한다." 이다. 변하는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 캡슐화 하면 프로그램을 수정하거나 기능이 변경 될때도 기존의 코드를 건들이지 않고 변화에 유연하게 대처할 수 있다. 객체 내부에서 인터페이스를 이용하여 틀을 만들고, 구현체에게 실제 동작하는 방식을 입력받아 유연하게 동작하도록 하는 방식을 전략 패턴이라고 한다. public abstract class Duck { FlyBehavior flyBehavior; Quackavior quackBehavior; public void fly(){ flyBehavior.fly(); .. Dynamic Programing 피보나치 import java.util.ArrayList; import java.util.Arrays; public class Fibonacci { public static void main(String[] args) { Fibonacci fb = new Fibonacci(); int fib_naive = fb.fib_naive(10); int fib_recur_dp = fb.fib_recur_dp(10); int fib_dp = fb.fib_dp(10); System.out.println("fib_naive = " + fib_naive); System.out.println("fib_recur_dp = " + fib_recur_dp); System.out.println("fib_dp = " + fib_dp); }.. [이펙티브자바] 1. 생성자 대신 정적팩터리 메서드를 고려하라 객체의 생성과 파괴 객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는법 올바른 객체생성방법과 불필요한 생성을 피하는 방법 제때 파괴됨을 보장하고 파괴 전에 수행해야할 정리 작업을 관리하는 요령을 알아본다. public class Test { public static Test getTestInstance(){ return new Test(); } } 정적 팩터리 메서드를 이용하여 Test클래스의 인스턴스를 가져올 수 있다. 일반적으로 클래스를 인스턴스화 할때 사용하는 생성자(new Test)를 사용하지 않고 정적 팩터리 메서드를 이용하면서 발생하는 장점과 단점을 알아보자. 장점 이름을 가질 수 있다. public class Person { public Person(String name, int ag.. [LeetCode] Add Two Numbers 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051public class AddTwoNumbers { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode answer = new ListNode(); ListNode node = answer; int carry = 0; while (l1 != null || l2 != null){ int sum = carry; if(l1 != null){ sum += l1.val; l1 = l1.next; } if(l2 != null){ sum += l2.val; l2 = l2.next; } .. [Database] 외래키 외래키란? 외래키는 테이블 간의 참조 무결성을 위한 제약조건이다. 외래키는 두 테이블을 서로 연결할 때 사용하는 키 이다. 다른 테이블의 기본키를 참조하여 외래키 값으로 사용한다. 참조 무결성 - 자식 릴레이션의 외래키와 부모 릴레이션의 기본키는 도메인이 동일해야 한다. - 외래키는 NULL값이 될 수도 있다.(사원은 하나의 부서를 갖는다. 하지만 신입사원은 부서가 미정일 수 있다.) 물품리스트 TABLE {물품ID(ITEM_ID), 물품이름(ITEM_NM), 물품제조사(ITEM_MAF)} 지급관리 TABLE {물품ID(ITEM_ID), 지급대상(USER), 지급날짜(OUT_DATE), 지급수량(OUT_CNT)} 물품리스트 테이블에서 물품ID가 기본키 이고 지급관리 테이블에서 물품ID를 외래키로 참조하고.. Recursion의 응용 - 미로찾기 현재 위치에서 출구까지 가는 경로가 있으려면 1. 현재 위치가 출구이거나 2. 이웃한 셀들 중 하나에서 현재의 위치를 지나지 않고 출구까지 가는 경로가 있거나 미로찾기(Decision problem) 1 2 3 4 5 6 7 8 9 10 public boolean findPath(x,y) { if(x, y) is the exit return true; else for each neighbouring cell(x', y') of (x, y) do if(x', y') is on the path way if findPath(x', y'); return true; return false; } Colored by Color Scripter cs 위 코드의 경우 (x, y)와 (x', y')가 서로 왔다갔다 하면서.. 2진검색 알고리즘 데이터가 크기순으로 배열에 저장되어 있다고 가정. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static int binarySearch(String[] items, String target, int begin, int end) { if(begin > end) return -1; else { int middle = (begin+end)/2; int compResult = target.compareTo(items[middle]); //target이 크면 1 작으면 -1 같으면 0 if(compResult == 0) return middle; else if (compResult Recursion(순환)-3 - 적어도 하나의 base case, 즉 순환되지 않고 종료되는 case가 있어야 한다. - 모든 case는 결국 base case로 수렴해야 한다. 암시적(implicit) 매개변수를 명시적(explicit) 매개변수로 바꾸어라. 0 ~ n-1 -> 암시적 begin ~ end -> 명시적 순차탐색 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public int search(int[] data, int n, int target) { for(int i = 0; i end) return -1; else if(target == data[begin]) return begin; else return search(data, begin+1, end, target); } Color.. 이전 1 2 3 4 ··· 8 다음