전체 글
-
아이템17. 변경 가능성을 최소화하라책/이펙티브자바 2021. 7. 27. 12:55
불변클래스 간단히 말해 그 인스턴스 내부 값을 수정할 수 없는 클래스이다. 불변 인스턴스의 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 대표적인 불변 클래스 ex. String, Wrapper class, BigInteger, BigDecimal 불변클래스의 장점 가변 클래스보다 설계하고 구현하고 사용하기 쉽다. 오류가 생길 여지가 적다. 안전하다. 생성된 시점의 상태를 파괴될 때까지 그대로 간직한다. 근본적으로 스레드 안전하여 따로 동기화 할 필요가 없다. 안심하고 공유할 수 있다. 불변클래스를 만드는 법 객체의 상태를 변경하는 메소드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 하위클래스에서 객체의 상태를 변경하는 사태를 막아준다. 대표적인 방법은 클래스를 fin..
-
아이템16. public 클래스에는 public 필드가 아닌 접근자 메서드를 사용하라책/이펙티브자바 2021. 7. 26. 14:57
// 예시 1 - Bad class Point { public double x; public double y; } 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다. API 를 수정하지 않고는 내부 표현을 바꿀 수 없다. 불변식을 보장할 수 없다. 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다. // 예시 2 - Good class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } // getter, setter } 접근자와 변경자 메소드를 활용해 데이터를 캡슐화한다. // 예시 3. 불변 필드를 노출한 public 클래스 - 과연 좋은가..
-
아이템15. 클래스와 멤버의 접근 권한을 최소화하라책/이펙티브자바 2021. 7. 26. 13:24
잘 설계된 컴포넌트 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐. 구현과 API 를 깔끔하게 분리한다. 서로의 내부 동작 방식에는 전혀 개의치 않는다. 정보 은닉의 장점 정보은닉, 캡슐화 라고 하는 개념은 소프트웨어 설계의 근간이 되는 원리다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발 할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅 할 수 있다. 다른 컴포넌트로 교체하는 부담이 적다. 성능 최적화에 도움을 준다. 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화가 가능하다. 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트라면 낯선 환경에서..
-
SQL 첫걸음 책 샀다.책/misc 2021. 7. 25. 00:51
당근마켓에서 6,000원 주고 구매 SQL 쿼리 안쓰다보니 기억이 안나서 한 번 다시 봤어야 해서 장바구니에 담아놓는 책인데 마침 당근마켓에 있길래 구매 완료.. 그래도 다른 책 보단 덜 어렵기를 바라며,, 책 산것들 중간 보고) 알고리즘 5장, 이펙 아이템 15 쯤 ... 8/11 다 읽음 전체적인 설명이 잘되어있어서 보기 좋다. 근데 쿼리문을 잘 사용하긴 어려워 보인다 왜냐면 책이 얇다보니 예제들이 별로 없다. JOIN 이나 어려운 쿼리들은 알아서 따로 추가로 공부해야 할 필요가 있다. 비슷한 책중에 데이터베이스 첫걸음 이라고 있는데 당근에 올라오면 사야겠따 ..
-
아이템14. Comparable을 구현할지 고려하라책/이펙티브자바 2021. 7. 25. 00:39
package java.lang; import java.util.*; public interface Comparable { public int compareTo(T o); } compareTo() 동치성비교 순서 비교 제네릭 Comparable 구현시 해당 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻한다. Arrays.sort(a); 와 같이 손쉽게 정렬이 가능하다. 자바 플랫폼 라이브러리의 모든 값 클래스와 열거타입이 Comparable을 구현했다. 이 인터페이스를 활용하는 수많은 제네릭 알고리즘과 컬렉션의 힘을 누릴 수 있다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 을 구현하자. compareTo() 규약 이 객체와 주어진 객체의 순서를 비교한..
-
아이템13. clone 재정의는 주의해서 진행하라책/이펙티브자바 2021. 7. 20. 19:15
다룰 내용 clone 메서드를 잘 동작하게끔 해주는 구현 방법 언제 그렇게 해야 하는지, 가능한 다른 선택지에 관해 Cloneable Interface 가 하는 일 메서드 하나 없는 인터페이스 Object.clone()의 동작 방식을 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출시 CloneNotSupportedException을 던진다. clone 규약 // 이 객체의 복사본을 생성해 반환한다. // 복사의 정확한 뜻은 그 개체를 구현한 클래스에 따라 다를 수 있다. // true x.clone() != x // true x.clone().getClass() == x.getCl..
-
아이템12. toString을 항상 재정의하라책/이펙티브자바 2021. 7. 19. 17:07
toString 규약 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 나타내라 모든 하위 클래스에서 이 메서드를 재정의하라 Object.toString() public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } IDE에서의 toString() 재정의 // PhoneNumber.class @Override public String toString() { return "PhoneNumber{" + "areaCode= '" + areaCode + '\'' + ", prefix='" + prefix + '\'' + ", lineNum=..
-
Level2) 카펫PS/programmers 2021. 7. 13. 20:15
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import java.util.*; public class Level2_카펫 { public static int[] solution(int brown, int yellow) { // yellow 의 약수 쌍을 구한다. // 약수 쌍을 돌며 가능한 경우 모두 수식에 맞춰 brown 값을 맞춰본다. // w >= h // yellow 블럭의 w, h 를 구하는거니 return 할때는 w+2, h+2 해준다. List divisor = getDivisor(yellow); return findBrownCount(brown, divis..