본문 바로가기

전체 글

(276)
Effective JAVA - Item14 : Comparable을 구현할지 고려하라. Comparable의 유일무이한 메서드인 compareTo 메서드 1. equals 메서드와 다른점 // - Object의 메서드가 아니라 Comparable의 메서드이다. // - 단순 동치성 비교에 더해 순서까지 비교할 수 있으며 제네릭하다. // (Comparable을 구현했다는 것은 클래스의 인스턴스들에 자연적인 순서가 존재함을 의미한다.) // - 따라서, 정렬이 가능하다. // - 검색, 극단값 계산, 자동 정렬되는 컬렉션관리 가능 // (TreeSet, TreeMap, Collections, Array) // "알파벳, 숫자 등과 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자" 2. compareTo의 일반 규약 // - 이 객체와 주어진 객체의 ..
Effective JAVA - Item13 : clone 재정의는 주의해서 진행하라 1. 배경 // Cloneable는 복제해도 되는 클래스임을 명시하는 인터페이스 // clone메서드는 해당 인터페이스가 아닌 Object에 protected로 선언되어 있음. // 따라서, Cloneable을 구현하는 것만으로는 clone메서드를 호출할 수 없다. 2. Cloneable 인터페이스의 역할 // - 기본적으로 해당 인터페이스는 Object의 protected 메서드인 clone의 동작 방식을 결정한다. // - 해당 인터페이스를 구현하고 object의 clone메서드를 재정의해 호출시 해당 클래스의 필드를 복사한 객체 반환 // - 해당 인터페으스를 구현안하고 clone 메서드 사용시 CloneNotSupportedException 발생 3. Clone메서드의 기본적인 구현 방법 // -..
Effective JAVA - Item12 : toString을 항상 재정의하라. 1. 주제 "toString을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅이 쉽다" 2. toString의 일반 규약 // 1. "간결하면서도 사람이 읽기 쉬운 형태의 유익한 정보" // 2. "모든 하위클래스에서 해당 메서드를 재정의하라" 3. toString 메서드가 자동 호출되는 경우 // 1. println, printf // - 아래의 경우에서 인스턴스 출력시 자동으로 toString이 호출됨을 확인할 수 있다. PhoneNumber number1 = new PhoneNumber(111, 222, 333); System.out.println(number1); // 2. 문자열 연결 연산자(+) String now = "hello"; System.out.prin..
이코테 - 정확한 순위 with JAVA 해결 - 기본적으로 플로이드 워셜 알고리즘을 사용한다. - 그래프를 만들어 노드 A, B 중 한쪽 방향으로만이라도 이동가능하면 두 사람은 비교 가능하다고 판단이 가능하다. - 한 노드에서 모든 노드로 다 비교가 가능하면(한쪽 방향이라도 이동이 가능하다면) 정확한 순위를 알 수 있다. 실수 - (int)1e9는 비교가 가능하다. - i, j 구분이 안되어서 실수를 했다. - 한쪽 방향으로만이라도 라는 로직을 처리할 때, and 연산자를 사용하였다. 코드 package JAVA.TCT.ShortestWay; import java.util.*; // 정확한 순위 public class Q2 { public static void main(String[] args){ Scanner sc = new Scanner(..
이코테 - 편집거리 with JAVA 해결 - 동작은 삽입, 삭제, 교체가 가능하다고 문제에서 제시한다. sunday를 saturday로 변경한다고 가정하자 2차원 테이블은 다음과 같이 구성된다. (2차원 테이블 : 가장 왼쪽열에 있는 sunday를 가장 위쪽행에 있는 saturday로 변경하는 비용 테이블, 0은 빈문자열을 의미) 0 S A T U R D A Y 0 0 (0, 0) 1 2 3 4 5 6 7 8 S 1 0 1 2 3 4 5 6 7 U 2 N 3 D 4 A 5 Y 6 - 예를들어, (2, 4)는 s1의 처음부터 두번째까지 글자를 s2의 처음부터 4번째 글자로 만드는 가장 적은 연산수이다. 삽입 : 왼쪽 칸 + 1 삭제 : 위쪽 칸 + 1 교체 : 왼쪽 위칸 +1 삽입, 삭제, 교체 중 가장 작은 값을 찾아 선택 후 + 1을 더..
Effective JAVA - Item11 : equals를 재정의하려거든 hashcode도 재정의하라. "equals를 재정의한 클래스 모두에서 hashcode도 재정의해야한다. 하지 않는다면 HashMap, HashSet에서 문제" 1. hashCode 규약 // 1. equals 비교에 사용되는 정보가 변경되지 않았다면 애플리케이션이 실행되는 동안 그 객체의 hashcode는 항상 같아야 한다. // (애플리케이션 종료 후 재실행시 변경될 수 있다.) // 2. equals가 두 객체가 같다고 판단했다면, 두 객체의 hashcode도 같아야 한다. // 3. equals가 두 객체가 다르다고 판단했더라도, hashcode는 같을 수 있다. 하지만 달라야 성능이 좋은 해시테이블이다. // - hashcode 재정의를 잘못했을 때, 크게 문제되는 조항은 두번째인데, 논리적으로 같은 객체는 같은 hashco..
Effective JAVA - Item10 : equals는 일반 규약을 지켜 재정의하라. 1. 3장 시작 : 모든 객체의 공통 메서드 - Object의 final이 아닌 메서드(eqauls, hashcode, toString, clone, finalize)는 모두 재정의를 염두해 두고 설계된 것임. - Object를 상속하는 즉, 모든 클래스는 해당 메서드를 재정의해야 한다. - 잘못 구현시 해당 메서드들을 재정의할 때, 지켜야할 규약을 잘 지켰다고 가정하는 클래스(HashMap, HashSet 등)에 오작동을 초래 2. Item10 : eqauls는 일반 규약을 지켜 재정의하라. - 일반적으로, 재정의를 안하게 되면 자기 자신과 같은지만 비교, 즉 인스턴스가 같은지만 비교한다. 3. eqauls를 재정의하지 않아도 되는 상황 3-1. 각 인스턴스가 본질적으로 고유하다. - 값을 나타내는 것..
이코테 - 못생긴 수 with JAVA 해결 못생긴 수는 2,3,5만을 약수로 갖는 수들을 의미한다. 따라서, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15 순서대로 이루어진다. 중요한 것은 못생긴수는 못생긴수에 2, 3, 5를 곱한 결과로 이루어진다는 것이다. 문제에서 1은 못생긴 수라고 주어진다. 1 1x2, 1x3, 1x5 = [1, 2, 3, 5] 2 2x2, 2x3, 2x5 = [1, 2, 3, 5, 4, 6, 10] = [1, 2, 3, 4, 5, 6, 10] 3 3x2, 3x3, 3x5 = [1, 2, 3, 4, 5, 6, 9, 10, 15] 코드 import java.util.*; public class Q5 { public static void main(String[] args){ Scanner sc = new..