본문 바로가기

자바

(25)
[자바] 널(null)이 아닌 제로 길이(zero-length) 배열 반환 다음과 같은 메소드는 흔히 볼 수 있습니다. private List cheesesInStock = ...; /** * @상점에서 치즈의 모든 것을 포함하는 배열을 반환하거나 * 구매 가능한 치즈가 없다면 널(null)이다. */ public Cheese[] getCheeses() { if(cheeseInStock.size() == 0) return null; } 치즈를 구매할 수 없는 상화에 특별한 경우를 만들 이유가 없습니다. 이렇게 할 경우 null 반환 값을 처리하기 위해 클라이언트에 코드를 추가로 작성해야 합니다. 다음 예제를 보겠습니다. Cheese[] cheeses = shop.getCheeses(); if (cheeses != null && Arrays.asList(shop.getCheese..
[자바] 생성자와 정적 팩터리 메소드 생성자와 정적 팩터리 메소드 첫번째 장점은, 생성자와는 달리 정적 팩터리 메서드에는 이름이 있다는 것 입니다. 두번째 장점은, 생성자와는 달리 호출할 때마다 새로운 객체를 생성할 필요는 없다는 것 입니다. 세번째 장점은, 생성자와는 달리 반환값 자료형의 하위 자료형 객체를 반환할 수 있다는 것 입니다. 반환되는 객체의 클래스를 훨씬 유연하게 결정할 수 있습니다. 이 유연성을 활용하면 public으로 선언되지 않은 클래스의 객체를 반환하는 API를 만들 수 있습니다. 그러면 구현 세부사항을 감출 수 있으므로 아주 간결한 API가 가능합니다. 이 기법은 인터페이스 기반 프레임워크 구현에 적합한데, 이 프레임워크에서 인터페이스는 정적 팩터리 메서드의 반환값 자료형으로 이용됩니다. 인터페이스는 정적 메서드를 가..
[자바] 계승과 구성 방식에 관하여 이전에 쓰레드관련 포스팅에서 객체합성이 상속보다 더 낫다라는 얘기를 잠깐 꺼낸적이 있습니다. 자바 이펙티브 서적에서 관련 내용을 다루고 있어 이 포스팅에서 주요 내용들을 정리해 보려 합니다. 실제 대규모 프로젝트를 접하다 보면, 하나의 객체가 만들어지기까지 몇번의 합성을 거치는 경우를 많이 보게 됩니다. 그 이유가 늘 궁금했는데, 그 질문에 대한 답을 차근히 써내려 가겠습니다. 상속은 자바에서 재사용을 돕는 강력한 도구이지만, 최선이라고 할 수 없습니다. 왜냐하면 상속을 적절히 사용하지 못하면 깨지기 쉬운 상태의 소프트웨어가 되기 때문입니다. 보통 상속은 상위 클래스와 하위 클래스 구현을 같은 프로그래머가 통제하는 단일 패키지 안에서 사용하면 안전합니다. 애초에 상속을 고려해 설계되고 그에 맞는 문서를 ..
[자바] 주요 개념 정리 finalize 메서드Java의 자동화된 쓰레기 수집기(garbage collector)는 객체를 삭제하기 전에 finalize() 메서드를 호출합니다. 따라서 객체가 삭제되기 직전에 실행되어야 하는 동작이 있다면 Object 클래스에 정의된 finalize() 메서드를 오버라이드하여 정의할 수 있습니다. Collection FrameworkJava의 컬렉션 프레임워크는 아주 유용합니다. 그 중 가장 유용한 몇 가지를 들어보면 다음과 같습니다. ArrayList: ArrayList는 동적으로 크기가 조정되는 배열로, 새 원소를 삽입하면 크기가 늘어납니다. ArrayList myArr = new ArrayList(); myArr.add("one"); myArr.add("two"); System.out.pr..
[자바] 자바를 잘 사용하기 위한 78가지 규칙 이펙티브 자바 2판에 수록된 내용입니다. 각 규칙에 대한 상세내용은 대중교통 오고가는 시간에 차례차례 읽어나가고 있습니다. java로 이런저런 개발시 단순히 문법 나열이 아닌, 잘 만들어진 SW를 작성하는데에 아주 유용한 팁이 될 것 같습니다. java 언어에 이런 기능이 있는데, 어떤 상황에서 어떠한 이유를 이런 것을 쓴다는 것을 아는 것은 매우 중요하다고 생각하며, 아래 규칙들을 또 정리하다보니 그동안 잘짜려고 노력했던 코드들이 상당부분 아래 규칙과 맞아떨어지는 부분들도 있었던 것 같습니다. 아래 규칙을 정의한 이펙티브 자바 저자는 더많은 경험과 지식을 갖고있는 훌륭한 개발자이니만큼 주니어개발자로서 모르는 부분은 배워서 실무에서 적용해보려고 합니다. 자바 코딩시 명료함(clarity)과 단순함(sim..