Chapter8 메서드 1. 매개변수가 유효한지 검사하라 메서드를 검사하여 원자성을 지켜야 한다. public 메서드가 아니면 assert를 사용하여 매개변수의 유효성을 검증할 수 있다.(javaf를 실행할 때 -ea 플래그를 설정해주어어 함) 단, 런타임에는 아무런 영향도 주지 않는다. 2. 적시에 방어적 복사본을 만들라 클래스가 클라이언트로 반환하거나, 받는 요소가 가변이라면 방어적으로 복사하여 원래 요소를 불변상태로 만들어야 한다. 3. 메서드 시그니처를 신중히 설계하라 메서드 이름을 신중히 지어야 한다. 편의 메서드를 너무 많이 만들지 마라. 매개변수 목록은 짧게 유지하자. 방법 여러 메서드로 쪼갠다. 매개변수를 여러개 묶어주는 도우미 클래스를 생성한다. 빌더 패턴을 메서드 호출에 사용한다. → ..
전체 글
우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc테스트 데이터 격리 1. 진행 상황 프로젝트 진행 중 잘되던 테스트에 오류가 발생했다. 음. 하나가 더 많이 저장되어 있네 뭐지? 저장되는 데이터가 2개로 되어있는데 3개가 저장되어 있다고 해서 한번 더 테스트를 진행해보았다. 엥 이번엔 다른게 문제네? 아.. 이거 데이터 베이스 문제구나... 이렇게 해서 찾아낸 원인은 바로 테스트 데이터 격리에 관한 문제 였다. 2. 테스트 데이터 격리 전체 테스트를 돌리면 @Transactional이 붙혀 있어도 데이터가 롤백이 안될 수도 있다. (애초에 @Transactional이 없는 테스트 일수도 있다.) 이런 상황이면 남아 있는 데이터가 다른 테스트에 영향을 미쳐 위와 같은 상황이 나올 수 있다. 그러면 이러한 문제를 어떻게 해결해야할까? 3. 해결방법 3-1..
Chapter7 람다와 스트림 1. 익명 클래스보다는 람다를 이용하라 람다는 익명 클래스와 개념은 비슷하지만 코드의 길이는 훨씬 짧다. 하지만 람다는 이름이 없고 문서화도 할 수 없기 때문에, 그 의미가 불명확하면 사용하지 말아야 한다. 또한 람다의 this는 자기 자신이 아니라 바깥의 객체를 나타낸다.(자신 참조x) 2. 람다보다는 메서드 참조를 사용하라 대부분 메서드 참조는 람다보다 코드의 길이가 더 짧게 사용이 가능하다. 또한 메서드 이름을 통하여 기능을 확실히 알 수 있게 해준다. 항상 그런 것은 아니므로 람다와 메서드 참조를 적절히 선택해서 사용해야 한다. 3. 표준 함수형 인터페이스를 사용하라 함수형 인터페이스가 미리 정의가 되어 있으므로, 필요한 용도에 맞는게 있으면 직접 구현하지말고 찾아서..
Chapter6 열거 타입과 애너테이션 1. int 상수 대신 열거 타입(enum)을 사용하라 단순히 int 상수를 private staic final로 선언하여 나열하는 것은 가독성이 좋지 않고, 안전하지 않으므로 안전하고, 다수의 기능이 있는 열거타입을 사용해야한다. 2. ordinal 메서드 대신 인스턴스 필드를 사용하라 ordinal()을 사용하면 해당 열거 타입이 몇 번째에 위치해 있는지를 알려 주는데, 이러한 방식은 새로운 열거 타입이 생겨 순서가 바뀌면 프로그램의 동작에 오류가 생길 수 있기 때문에 지양해야 한다. 대신 인스턴스 필드를 생성하여 사용하면 된다. 3. 비트 필드 대신 EnumSet을 사용하라 열거할 수 있는 타입을 한데 모아 사용하려면 비트 필드보다는 EnumSet을 사용해야 ..
[자료구조] Red Black Tree 1. 정의 BST를 기반으로하는 트리 형식의 자료구조 검색, 삽입, 삭제의 시간이 $O(logN)$이 소요 됨 2. 규칙 모든 노드는 빨간색이나 검은색 루트는 항상 검은색 새로 추가되는 노드는 빨간색 루트에서 잎 노드로 가는 모든 경로에는 같은 수의 검은색 노드가 있어야 함 어떤 경로에서도 빨간색 노드가 연속으로 2개가 있으면 안됨 모든 빈 노드(null)는 검은색이라고 가정 2.1 균형을 맞추는 방법 이모 노드가 검은색인 경우 회전을 시킴 회전 후에, 부모 노드는 검은색, 두 자식 노드는 빨간색이어야 함 이모 노드가 빨간색인 경우 색깔을 전환 전환 후에, 부모 노드는 빨간색, 두 자식 노드는 검은색이어야 함 3. 구현 public class RedBlackTree..
[자료구조] AVL트리 1. 정의 스스로 균형을 잡는 이진 탐색 트리 왼쪽과 오른쪽의 높이 차가 1이하여야 함. 항상 O(logN)의 시간복잡도를 보장 2. 구현 //AVL트리의 생성자 public AVLTree() { root = null; currentSize = 0; } //기본 노드 class Node { T data; Node left; Node right; Node parent; public Node(T obj) { data = obj; parent = null; left = null; right = null; } } //추가 메서드 public void add(E obj) { Node node = new Node(obj); if (root == null) { root = node; curre..
[자료구조] 힙 1. 정의 이진 트리 구조로 이루어져 있다. 최대값과 최소값을 빨리 찾아낼 수 있다. 최대 힙 항상, 자식 노드 부모 노드 관계를 만족해야 한다. 노드의 개수를 n이라고 하면 트리의 높이는 $log_2(n+1) - 1$로 구할 수 있다. 2. 추가 제거 이제부터 최대 힙 기준으로 설명하겠습니다. 추가 비어있는 공간에 노드를 추가한다. 부모 노드보다 자식 노드가 더 크면 두 노드의 자리를 바꾼다. public void add(E obj) { array[++lastposition] = obj; // 1. 노드 추가 trickleUp(lastposition); // 2. trickle up - 부모 노드와 자식 노드를 바꿀지 ..
[자료구조] 트리 1. 정의 트리는 각각의 노드들을 간선(edge)로 연결한 자료구조로써, 각각의 노드들은 부모-자식 관계를 가진다. 뿌리(root): 트리의 시작 잎(leaf): 자식이 없는 노드 간선의 수에 따라 level을 나눈다. 1.1 완전 트리(Complete Tree) 잎이 아닌 모든 노드가 2개의 자식 노드를 가지고 있고, 마지막 줄은 왼쪽에서 오른쪽 순서로 채워져 있는 트리 1.2 정 트리(Full tree) 잎이 아닌 모든 노드가 2개의 자식 노드를 가지고 있고, 모든 잎이 같은 레벨에 있는 트리 2. 순회 전위 순회(Pre order traversal / Depth first traversal) : 루트 노드에서 시작하여, 왼쪽 자식 노드로 갔다가 오른쪽 자식 노드로 가는 순회 방법 ..