본문 바로가기

전체 글

알고리즘문제해결전략-21(Tree) 학생들의 이름 목록, 텍스트 문서의 내용, 인터넷 게시판에 올려진 글들은 기본적으로 모두 자료를 한 줄로 놓아 배열하기 위한 '선형 자료 구조' 지만 현실에는 회사나 학교의 조직도, 본선 대진표 같은 계층형 구조를 가지는 자료구조도 있다. - Tree: 계층적 구조를 갖는 자료들을 표현하기 위한 자료구조 트리의 구성 요소트리는 자료가 저장된 노드들이 간선으로 연결되어 있는 자료구조, - 상/하위 관계가 있으며 두 노드 연결되었을때는 한 쪽은 상위, 하위가 명확해야함. root: 결국 노드들은 상/하위 관계를 가질 수 밖에 없는데 ,하위 노드만 가진 즉 제일 위에 있는 노드leaf: 반대로 하위 노드를 가지지 못한 노드depth: root 에서 어떤 노드 까지 가는데 거치는 간선의 수height: .. 더보기
이펙티브 자바 item13 clone 재정의는 주의해서 진행하라. Cloneable 은 복제해도 되는 클래스임을 mixin interface 지만 clone의 구현이 Objects인 점과 proteced 라는 점으로 목적을 제대로 이루지 못했다.#mixin: 객체지향 언어에서 다른 클레스에서 '사용' 할 목적으로 만들어진 클래스Cloneable 인터페이스는 대체 무슨 일을 하는가. Object의 protected 메서드인 clone의 동작 방식을 결정.1.Cloneable 구현 클래스의 인스턴스에서 clone 호출시 객체의 필드들을 하나하나 복사한 객체를 반환2.구현x 클래스의 인스턴스에서 호출시 CloneNotSupportedException을 던진다 . 객체의 복사본을 생성해 반환한다.'복사'의 정확한 뜻은 그 객체를 구현한 클래스에 따라 다를수 있다.일반적인.. 더보기
이펙티브 자바 item12 toString을 항상 재정의하라. 기본으로 주어지는 toString() 은 PhoneNumber@3dasd13 같은 형식으로 객체와 관련된 정보를 파악하기 어렵다toString을 재정의하면 좋은 점1. 디버깅 편의성: 객체 상태를 바로 확인 가능2. 로그 출력 : 시스템 로그에 바로 객체 정보를 기록 가능3. 가독성 : 개발자 뿐 아니라 사용자에게 보여줄 때도 유용어떤 형식으로 구현해야 하나. 간결하면서 사람이 읽기 좋은 형태로@Overridepublic String toString() { return areaCode + "-" + prefix + "-" + lineNum;}포맷은 문서에 명시하는게 좋다. 더보기
이펙티브 자바 item11 equals를 재정의 하려거든 hashCode도 재정의하라 equals 를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. 1 equals 비교에서 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다.2 equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 같은 값을 반환해야한다.3 equals(Obejct)가 두 객체를 다르다고 판단했더라도 , 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단 다른 객체에 대해서는 다른 값을 .. 더보기
이펙티브 자바 item10 equals 는 일반 규약을 지켜 작성하라 1. equals를 재정의할 때 꼭 지켜야 하는 규약자바에서 `equals(Object o)`는 단순히 "같다/다르다"를 판단하는 메소드예요. 하지만 아무렇게나 만들면 버그가 생깁니다. 그래서 자바 언어 명세에서 **다섯 가지 규칙**을 반드시 지키라고 했습니다. (1) **반사성 (Reflexivity)**- 자기 자신은 항상 자기 자신과 같아야 한다. `x.equals(x) == true`👉 예: `String s = "abc";` → `s.equals(s)`는 무조건 `true` (2) **대칭성 (Symmetry)**- `x.equals(y)`가 `true`라면 `y.equals(x)`도 반드시 `true` `x.equals(y) == true → y.equals(x) == tru.. 더보기
이펙티브 자바 item9 finally 보다는 try-with-resource를 사용하라. 자바 라이브러리에는 close 메소드를 호출해 직접 닫아줘야 하는 자원이 많다.자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지는데 전통적으로 자원이 제대로 닫힘을 보장하는 수단으론 try-finally가 쓰였다 try-catch``` javastatic void copy(String src, String dst) throws IOException{ InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dst); try { byte[] buf = new byte[BUFFER_SIZE]; .. 더보기
이펙티브자바 item8 finalizer와 cleaner의 사용을 피하라. 1. Java의 객체 소멸자 종류 finalizerfinalize() 메소드 구현 가능, 객체가 GC 대상이 되면 호출실행 시점 예측 불가, 성능 저하, 보안 문제, GC 구현마다 동작 차이사용하지 않음cleanerCleaner를 통해 등록된 Runnable 실행, finalizer 대체즉시 실행 보장 없음, 백그라운드 GC 스레드에서 수행제한적 사용 가능, 즉시 실행이 필요한 작업에는 부적합차이점 요약finalizer : 언어 명세에서 스레드나 시점 명시 없음 → 예측 불가, 위험cleaner : 실행 스레드를 어느 정도 제어 가능, 백그라운드에서 수행, 즉시 수행 보장 없음2. 실행하지 말아야 하는 이유실행 시점 불확실GC가 객체를 수집할 때만 실행즉시 실행 보장이 없음 → 제때 수행되어야 하는 작업.. 더보기
이펙티브 자바 item7 다 쓴 객체 참조를 해제 하라 ``` javapublic class Stack { public Object [] elements; private int size= 0; private static final int DEFAULT_INITIAL_CAPACITY=16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if(size==0) t.. 더보기