# Effective Java

59개의 포스트
post-thumbnail

Item 17. 변경 가능성을 최소화하라

Java 라이브러리는 대표적으로 String, BigInteger, BigDecimal 같은 불변 클래스를 제공한다.가변 클래스보다 설계, 구현, 사용이 쉽다.오류가 생길 여지도 적고, 훨씬 안전하다.객체의 상태를 변경하는 메서드(변경자, setter)를 제공하지 않는

2020년 9월 9일
·
0개의 댓글
post-thumbnail

Item 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

위 public 클래스처럼 단순히 데이터만 모아 놓은 클래스가 존재한다고 가정해보자.현재 필드가 모두 public열려 있기 때문에 외부에서 누구든지 언제든지 접근해서 데이터를 변경할 수 있다.이는 객체지향의 핵심원리인 캡슐화를 위반하게 된다.또한 API를 변경하지 않고

2020년 9월 9일
·
0개의 댓글
post-thumbnail

Item 15. 클래스와 멤버의 접근 권한을 최소화하라

시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발 가능시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅 가능. 다른 컴포넌트로 교체하는 부담도적음성능 최적화에 도움을 준다.소프트웨어 재사용성을 높인다. 외부에 의존하지 않고 독자적으로 동작할 수

2020년 9월 4일
·
0개의 댓글
post-thumbnail

Effective Java 31. 한정적 와일드 카드를 사용해 API 유연성을 높이라

Wildcard 매게 변수화 타입은 불공변(invariant)이다. 즉 서로 다른 타입 Type1과 Type2가 있을때 은 의 하위 타입도 상위 타입도 아니다. 즉 은 와 아무 관계도 아니라는 말이다. 이처럼 매개변수화 타입은 고정되어 있지만 때로는 좀 더 유연하

2020년 9월 2일
·
0개의 댓글
post-thumbnail

Effective Java 78. 공유 중인 가변 데이터는 동기화해 사용하라

synchronized 키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장된다.한 객체가 생성되고, 이 객체 접근하는 메서드는 그 객체에 lock을 건다. 락을 건 메서드는 객체의 상태를 확인하고 필요하면 수정한다. 즉, 객체를 하나의 일관된 상태에서 다

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 77. 예외를 무시하지 말라

예외를 무시하지 말자.안타깝게도 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try-catch로 감싼 후 catch 블록에서 아무것도 하지 않으면 된다.예외는 문제 상황에 대처하기 위해 존재하는데, catch블록을 비워두면 예외가 존재할 이유가 사라진다 비유하자면

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 76. 가능한 한 실패 원자적으로 만들라

작업 도중 예외가 발생해도 그 객체는 여전히 정상적으로 사용할 수 있다면 멋지지 않을까? 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 이러한 특성을 실패 원자적 이라고 한다.가장 간단한 방법은 불변 객체로 설계하는 것이다. 불변 객체

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 75. 예외의 상세 메세지에 실패 관련 정보를 담으라

예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 스택 추적 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열이다.예외의 toString 메서드에 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하는 일은 아주 중요하다

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 74. 메서드가 던지는 모든 예외를 문서화하라

메서드가 던지는 예외는 그 메서드를 올바로 사용하는데 아주 중요한 정보다.검상 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 javadoc의 @throw 태그를 사용하여 정확히 문서화 하자. 공통 상위 클래스 하나로 뭉뚱그려 선언하는 일은 삼가자. ex)

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 73. 추상화 수준에 맞는 예외를 던지라

수행하려는 일과 관련 없어 보이는 예외가 튀어나오면 당황스러울 것이다. 이는 윗 레벨 api를 오염 시킬 수 있다. 앞서 서술한 문제를 피하기 위해서는 상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꾸어 주어야 한다. 이를 예외 번역이라고 한다

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 72. 표준 예외를 사용하라

표준 예외를 재사용한다면 얻는것이 많다. 내가 작성한 API가 다른 사람이 익히고 사용하기 쉬워지고, 많은 프로그래머에게 익숙한 규약을 그대로 따르기 때문이다. 그리고 여러분의 코드 역시 읽기 쉬워진다.가장 많이 사용되는 예외이다. 호출자가 인수로 부적절한 값을 넘길

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 71. 필요 없는 검사 예외 사용은 피하라

검사 예외는 제대로 활용하면 api와 프로그램의 질을 높일 수 있다. 검사 예외는 발생한 문제를 프로그래머가 처리하여 안정성을 높이게끔 해준다. 물론 검사 예외를 사용하면, 오히려 쓰기 어려운 api가 된다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라

자바는 문제 상황을 알리는 타입(throwable)으로 검사 예외, 런타임 예외, 에러, 이렇게 세 가지를 제공하는데, 언제 무엇을 사용해야 하는지 헷갈려 하는 프로그래머들이 있다.호출하는 쪽에서 복구하리라 여겨지는 상황이라면 검사 예외를 사용하라 이는 검사 예외와 비

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 69. 예외는 진짜 예외 상황일때만 사용하라

무슨 일을 하는지 절혀 알 수 없는 코드이다. 이 코드는 배열을 순회하는데, 끔찍한 방식으로 진행하고 있다. 무한 루프를 돌다가 배열의 끝에 도달해 예외가 발생하면 끝을 내는 것이다.이 코드는 성능 향상을 위해서 작성했다고 생각할 수 있지만, 표준 관용구(for-loo

2020년 9월 1일
·
0개의 댓글
post-thumbnail

Effective Java 68. 일반적으로 통용되는 명명 규칙을 따르라

자바 플랫폼은 명명 규칙이 잘 정립되어 있으며 그중 많은 것이 자바 언어 명세에 기술되어 있다. 명명 규칙은 크게 철저와 문법, 두 범주로 나뉜다.철자 규칙은 패키지, 클래스, 인터페이스 등 변수의 이름을 다룬다. 이 규칙은 특별한 이유가 없는 한 반드시 따라야 한다.

2020년 8월 26일
·
0개의 댓글
post-thumbnail

Effective Java 67. 최적화는 신중히 하라

최적화는 좋은 결과보다는 해로운 결과로 이어지기 쉽고, 섣불리 진행하면 특히 더 그렇다. 성능때문에 견고한 구조를 희생시키지 말자. 빠른 프로그램보다는 좋은 프로그램을 작성하라 좋은 프로그램이지만 원하는 성능이 나오지 않는다면 그 아키텍쳐 자체가 최적화할 수 있는 길을

2020년 8월 26일
·
0개의 댓글
post-thumbnail

Effective Java 65. 리플렉션보다는 인터페이스를 사용하라

리플렉션 기능(java.lang.reflect)을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다. Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는 constructor, Method, Field 인스턴스를 가져올 수 있고, 이어서 이어서

2020년 8월 26일
·
0개의 댓글
post-thumbnail

Effective Java 66. 네이티브 메서드는 신중히 사용하라

자바 네이티브 인터페이스(Java Native Interface)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다. 여기서 네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다.레지스트리 같은 플랫폼 특화 기능을 사용한다.네이티브

2020년 8월 26일
·
0개의 댓글
post-thumbnail

Effective Java 64. 객체는 인터페이스를 사용해 참조하라

아이템 51에서 매개변수 타입으로 클래스가 아닌 인터페이스를 사용하라고 했다. 이 조언을 객체는 클래스가 아닌 인터페이스로 참조하라고 확장할 수도 있다.인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해질 것이다. 나중에 구현 클래스를 교체하고자 하다

2020년 8월 26일
·
0개의 댓글
post-thumbnail

Effective Java 63. 문자열 연결은 느리니 주의하라

문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 하지만 한줄짜리 출력값 정도는 괜찮지만, 본격적으로 사용할 경우 성능저하가 일어난다. 문자열 n개를 잇는 시간은 n2에 비례한다 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용 모두 복

2020년 8월 26일
·
0개의 댓글