본문 바로가기

Develop/Java

(3)
[Develop/Java] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 이 포스팅은 이펙티브 자바 도서내용 정리입니다. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 인스턴스 필드들을 모아놓는 클래스 작성 아래와 같이 인스스 필드들을 모아놓는 일이외에는 아무 목적도 없는 퇴보한 클래스를 작성할 때 필드는 public이어스는 안된다.class Point { public double x; public double y; } 이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다. API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수작업을 수행할 수도 없다. 철저한 객체 지향 프로그래머는 이런 클래스를 필드를 모두 private으로 바꾸고 public 접근자(get..
[Develop/Java] try-finally보다는 try-with-resoureces를 사용하라 이 포스팅은 이펙티브 자바 도서내용 정리입니다. try-finally보다는 try-with-resoureces를 사용하라. 기본적인 try-finally 사용 자바 라이브러리에는 close 메서드를 호출해 직접 닫아줘야하는 자원이 많다. InputStream, OutputSteam, java.sql.Connection 등이 좋은 예다. 자원 닫기는 클라이언트가 놓치기 쉬워서 성능 문제로 이어지기도 한다. 이런 자원 중 상당수가 안전망으로 finallizer를 활용하지만 finallizer은 믿을만하지 못하다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 예외가 발생하거나 메서드에서 반환되는 경우를 포함해서다. 아래 예시를 보자. static String firstLi..
[Develop/Java] toString의 재정의 이 포스팅은 이펙티브 자바 도서내용 정리입니다. toString의 재정의 이펙티브 자바에서 toString 메서드의 재정의에 관하여 알게된 점을 포스팅한다. Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 보통 PhoneNumber@abbbd처럼 단순히 클래스_이름@16진수_해시코드를 반환할 뿐이다. toString의 일반 규약에 따르면 '간결하면서 사람이 읽기 쉬운 형태의 유익한 정보'를 반환해야 한다. 따라서 모든 하위 클래스에서 이 메서드를 재정의해야한다. toString을 잘 구현한 클래스는 사용하기에 훨씬 좋고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. toString 메서드는 객체를 println, printf..