전체 카테고리361 [Effective Java] 아이템14 Comparable을 구현할지 고려하라 ■ Comparable 인터페이스 Comparable 인터페이스는 객체간 비교를 용이하게 해주는 인터페이스이다. 이 인터페이스를 구현한 객체들은 서로간의 비교 연산이 가능하다. Comparable을 구현한 객체들의 배열은 다음처럼 손쉽게 정렬할 수 있다. Arrays.sort(a); 자바 플랫폼 라이브러리의 모든 값 클래스와 열거타입이 Comparable을 구현했다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하자. ■ compareTo Comparable 인터페이스의 유일한 메서드인 compareTo의 규약을 살펴 보겠다. 매개 변수 인스턴스와 자신의 인스턴스를 비교하도록 해야한다. 또한 자신의 인스턴스가 매개변수보다 작으면 음수, 같으면.. 2021. 2. 5. [알고리즘] 2018 카카오 블라인드 - 프렌즈4블록 1. 문제 2. 문제 풀이 블록을 아래로 내리는 부분이 좀 까다롭고 나머지는 문제에 주어진대로 풀면 되는 문제였다. 1. 주어진 1차원 배열을 2차원 배열로 옮긴다. 2. 2*2영역이 같을 경우 해당 영역을 check 2차원 배열에 true로 표시한다. 3. check 2차원 배열에 true로 표시된 공간을 블록이 터졌다는 의미로 "*"로 바꾼다. 4. 블록을 터트린 후 위에 있던 블록들을 아래로 내린다. 블록을 내리는 downBlock() 메서드의 경우 하나라도 내려간 블록이 있으면 해당 열의 블록을 내리는 작업을 다시 반복하였다. 내려가는 블록이 없을 경우 다음 열을 검사한다. import java.util.*; class Solution { public static int solution(int m.. 2021. 2. 3. [Effective Java] 아이템13 clone 재정의는 주의해서 진행하라 ■ Cloneable Cloneable은 복제해도 되는 클래스임을 알리기 위해 만들어진 믹스인 인터페이스이다. Java의 Cloneable 인터페이스를 보면 아무런 메소드가 보이지 않는다. 가장 큰 문제는 clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고, 그마저도 protected라는데 있다. 그래서 Cloneable을 구현하는 것 만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. Cloneable 인터페이스를 구현한 클래스는 Object의 메서드인 clone()을 어떤식으로 사용할 것인지를 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출하면 C.. 2021. 2. 1. [알고리즘] 2018 카카오 블라인드 - 뉴스 클러스터링 1. 문제 2. 문제 풀이 HashMap을 이용하면 풀 수 있는 간단한 문제였다. 이 문제의 포인트는 합집합을 구할 때는 2개의 집합중 key의 개수가 더많은쪽을 합집합의 사이즈에 더해주면되고 교집합을 구할 때는 2개의 집합중 key의 개수가 더 작은쪽을 교집합의 사이즈에 더해주면 된다. 마지막에 answer을 계산 할 때는 합집합과 공집합의 사이즈가 모두 0일 경우 집합 A와 집합 B가 정의되지 않으므로 J(A,B)는 1로 정의한다. import java.util.*; class Solution { static int answer = 0; public static int solution(String str1, String str2) { //1. 소문자 변환 str1 = str1.toLowerCase().. 2021. 2. 1. 자바 테스트 격리 이 포스팅은 우아한Tech의 보스독님의 테스트 격리 영상을 정리한 내용입니다. ■ 테스트 격리란? 테스트는 순서에 상관없이 독립적으로 실행되며 결정적으로 수행되어야합니다. 테스트를 서로 격리하여 한 테스트를 실행하여도 다른 테스트에 영향을 주지 않도록 해야합니다. ■ 계층별 테스트 데이터들이 공유되기 때문에 불완전한 테스트를 작성하게 됩니다. 따라서 데이터베이스를 얼마나 의존하지 않고 테스트를 작성할지 또는 데이터 베이스 상태를 테스트 이전으로 돌릴지에 대해서 신경을 써야합니다. ● Domain(POJO) 계층 애플리케이션의 POJO(Model, Utils, etc...)는 JUnit으로 테스트 객체는 new 연산자(또는 빌더)로 간단히 인스턴스화 각각의 테스트가 실행되기 전에 @BeforeEach에서 .. 2021. 1. 24. [Effective Java] 아이템12 toString을 항상 재정의하라 ■ toString 재정의 이유 및 방법 toString을 잘 구현한 클래스는 사용하기 편하고, 그 클래스에 대해서 디버깅하기 쉽다. map 객체를 출력하는 경우 {Jenny=PhoneNumber@adbbd} 보다는 {Jenny=707-867-5309}라는 메시지가 나오는게 훨씬 사용성이 좋다. 실전에서는 toString 메서드를 재작성 할 때 그 객체가 가진 주요 정보를 모두 반환하는게 좋다 toString을 구현할 때면 반환값의 포맷을 문서화할지 정해야한다. 포맷을 명시하면 그 객체는 표준적이고 명확하고 사람이 읽을 수 있게 된다. 포맷을 명시하기로 했으면 해당 포맷에 맞는 문장렬과 객체를 상호전환할 수 있는 정적 팩터리나 생성자를 함께 제공하면 좋다. 단, 포맷을 한번 명시하면 평생 그 포맷에 얽매.. 2021. 1. 24. 이전 1 ··· 17 18 19 20 21 22 23 ··· 61 다음