본문 바로가기 메뉴 바로가기

개발은 꽃

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

개발은 꽃

검색하기 폼
  • 분류 전체보기 (176)
    • Spring (53)
      • SpringBoot 실습 (11)
      • Spring 웹 MVC (14)
      • Spring 핵심 (14)
      • Spring 기초 (8)
      • Spring Boot JPA (2)
    • Java (76)
      • Effective Java (24)
      • Java 기초 (27)
      • 디자인 패턴 (17)
      • The Java (6)
      • Java8 (2)
    • 객체지향 (6)
    • Test (12)
      • JUnit (9)
      • Mockito (3)
    • Network (8)
    • DataBase (15)
    • JavaScript (4)
    • 운영체제 (0)
    • 기타 (2)
      • 일지 (0)
  • 방명록

Java/Effective Java (24)
[Effective Java] 아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용해라

Item 61. 박싱된 기본 타입보다는 기본 타입을 사용해라 JDK 1.5버전에서는 오토박싱과 오토언박싱 덕분에 두 타입을 크게 구분하지 않고 사용할 수 있다. 하지만 두 개의 차이는 명확하게 구분된다. 기본 타입과 박싱된 기본 타입의 차이 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값 + 식별성이라는 속성을 갖는다. 다시 말하면, 값이 같은 박싱된 기본 타입의 인스턴스가 두 개 존재할 때, 이 두 개는 서로 다르다고 식별될 수 있다. 기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 유효하지 않은 값을 가질 수 있다. 즉, null을 가질 수 있다. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 더 효율적이다. 이 세 가지 차이로 인해 주의하지 않고 사용하면 문제가 발생할 ..

Java/Effective Java 2020. 2. 3. 08:48
[Effective Java] 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라

정보은닉과 접근제한자 정보은닉이란, 잘 설계된 컴포넌트는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐이다. 즉, 오직 API를 통해서만 다른 컴포넌트와 소통하고 서로의 내부 동작 방식에는 개의치 않는 것을 말한다. 그럼, 정보은닉의 장점을 살펴보자 시스템 개발 속도를 높여준다. 여러 컴포넌트들이 독자적이어서 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춰준다. 다른 컴포넌트로 교체하는 부담이 적기 때문이다. 정보은닉 자체가 성능을 줄여주지는 않지만 성능 최적화에는 도움을 준다. 다른 컴포넌트에 영향을 주지않고 해당 컴포넌트만 최적화할 수 있는 기회가 생기기 때문이다. 소프트웨어 재사용성을 높여준다. 외부에는 거의 의존하지 않고 독자적으로 동작할 수 있는 ..

Java/Effective Java 2020. 1. 4. 21:35
[Effective Java] 아이템6. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 많은 클래스가 하나 이상의 자원을 의존한다. 맞춤법 검사기(SpellChecker)가 사전(Dicitonary)에 의존하는 예를 확인해보자 //정적 유틸리티 활용 public class SpellChecker { private static final Lexicon dictionary = ...; //정적 유틸리티 private SpellChecker() {} //객체 생성을 방지 public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } //싱글턴 활용 public class SpellChecker { private final Le..

Java/Effective Java 2019. 12. 22. 20:07
[Effective Java] 아이템5. 불필요한 객체 생성을 피하라

불필요한 객체 생성을 피하라 똑같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다. 한 코드의 예를 통해 살펴보자 String s = new String("Effective Java"); String s = "Effective Java"; 첫번 째 문장은 실행될 때마다 String 인스턴스가 새로 만들어진다. 이 문장은 매우 쓸데 없다.. 만약 반복문이나 빈번히 호출되는 메서드 안에 있다면 쓸데없이 해당 인스턴스가 새로 만들어질 수 있다. 그냥 재사용하면 되는데.. 두번 째 문장을 살펴보면 새로운 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용한다. 즉, 반복문이나 빈번히 호출되는 메서드 안에 있어도 가상 머신 안에서 재사용함이 보장되는 것이다 생성자 대신..

Java/Effective Java 2019. 12. 22. 20:06
[Effective Java] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

인스턴스화를 막으려거든 private 생성자를 사용하라 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있을 것이다. 정적 메서드와 정적 필드(static) 사용 시 클래스 인스턴스 없이 호추링 가능 다른 객체와 공유 가능 유틸리티 함수를 만드는데 유용 Math.max(); 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. 이는 하위 클래스를 만들어 인스턴스화 하면 그만인것을.. 결과적으로, private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. private UtilityClass() { throw new AssertionError(); } 명시적 생성자가 private이니 밖에서 접근 불가하다. 꼭 AssertionError를 던질 필요는 없지만, 클래스 안..

Java/Effective Java 2019. 12. 14. 22:41
[Effective Java] 아이템 3. Private 생성자나 열거 타입으로 싱글턴임을 보증하라

Private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴이란, 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴을 만드는 방식 두 가지 두 가지 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 첫번째 방식 //public static final 필드 방식의 싱글턴 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){...}; } private 생성자는 public static final 필드인 Elvis.INSTANCE를 초기화할 때 딱 한번만 호출된다. public 이나 protected(같은..

Java/Effective Java 2019. 12. 14. 22:40
[Effective Java] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라

생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴 생성자를 매개변수 개수에 따라 계속적으로 추가하는 패턴을 말함 이 클래스의 인스턴스를 만드려면 원하는 매개변수를 모두 포함하는 생성자 중 가장 짧은 것을 골라 호출하면 되는데, 클라이언트 입장에서 매개 변수로 불필요한 변수를 삽입할 때 헷갈릴 수 있다, 결국, 클라이언트가 실수로 매개변수의 순서를 바꾸어 값이 들어오면 런타임 에러가 발생할 수 있다. 이런 단점을 해결하기 위해 자바빈즈 패턴을 활용한다. 자바빈즈 패턴 기본 생성자만을 만들고 매개변수로 필요한 값들은 set메서드를 활용해서 객체를 완성하는 특징이다. 하지만 자바빈즈 패턴에서는 객체 하나를 만들려면 메서드를 여러 개 호출해야하고, 객체가 완전히 생성되기 전까지는 일관성이 무너진 상..

Java/Effective Java 2019. 12. 14. 22:38
[Effective Java] 아이템1. 생성자 대신 정적 팩토리 메서드를 고려하라

생성자 대신 정적 팩토리 메서드를 고려하라 클래스 생성자와 별도로 정적 팩토리 메서드를 제공할 수 있다. public static Boolean vlueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 정적 팩토리 메서드가 생성자보다 좋은 장점 다섯가지 이름을 가질 수 있다. 생성자는 반환 시 객체의 특성을 알기 어렵지만, 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 생성자인 BigInteger(int, int, Random)과 정적 팩토리 메서드인 BigInteger.probablePrime 중 어느 쪽이 '값이 소수인 BigInteger를 반환한다'의 의미를 더 잘 설명하는지는 확실히 확인할 수 있을 것이다. 또한..

Java/Effective Java 2019. 12. 14. 22:34
이전 1 2 3 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • 정적팩터리메서드
  • 빈 순환 참조
  • flatMap
  • 자바8
  • 점층적 생성 패턴
  • @Lazy
  • java
  • 팩토리 메소드 패턴
  • try catch finally
  • package-private
  • 김영한
  • mustache
  • junit
  • 이펙티브 자바
  • JPA
  • 연관관계
  • try with resources
  • 이펙티브자바
  • 스프링부트
  • 생성자
  • java8
  • effectivejava
  • Effective Java
  • jdk버전
  • 복사 팩토리
  • 빌더 패턴
  • springboot
  • Spring
  • ifPresent
  • 인프런
more
«   2026/02   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바