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

개발은 꽃

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • 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)
  • 방명록

Effective Java (6)
[이펙티브 자바] 아이템 24.멤버 클래스는 되도록 static으로 만들어라.

들어가기에 앞서, 중첩 클래스란 다른 클래스안에 정의된 클래스를 말한다. 중첩 클래스의 종류로는, 정적 멤버 클래스, 멤버 클래스, 익명 클래스, 지역 클래스 로 총 네 가지가 있다. 이번 아이템에서는 각각의 중첩 클래스의 특징을 살펴보자. 먼저 중첩 클래스를 왜 사용하는가를 보자. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다. 서로 관련 있는 클래스들을 논리적으로 묶어, 코드의 캡슐화를 증가시킬 수 있다. 외부에서 내부 클래스에 접근할 수 없으므로 코드의 복잡성을 줄일 수 있다. 또한, 외부 클래스의 복잡한 코드를 내부 클래스로 옮겨 코드 복잡성을 줄일 수 있다. 정적 멤버 클래스 해당 클래스는 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다는 점을 제..

Java/Effective Java 2020. 9. 7. 21:47
[이펙티브 자바] 아이템 16.public 클래스에서는 public 필드가 아닌 다른 접근자 메서드를 사용하라

개발을 하다보면 인스턴스 필드들만 모아놓는 목적만 가진 아래와 같은 클래스를 구성하는 경우가 있다. public class Point{ public double x; public double y; } 이유는, 이러한 클래스 형태로 구현했을 때는 클라이언트에서 필드에 직접 접근할 수 있으므로 캡슐화의 이점을 제공하지 못한다는 단점이 있다. 또한 좀 더 알아보면, API를 수정하지 않고는 내부 표현을 바꿀 수 없다. public 필드로만 구성되어 있기 때문에 내부 표현을 변경하기 위해서는 API의 필드를 변경해야 한다. (메소드가 존재할 땐 파라미터에 따라 내부 표현이 변경 가능) 불변식을 보장할 수 없다. 클라이언트에서 직접적으로 필드에 접근하고 있으므로 클라이언트에 의해 언제든지 변경이 가능하다. 외부에..

Java/Effective Java 2020. 8. 18. 13:34
[이펙티브 자바] 아이템 13.clone 재정의는 주의해서 진행해라

Cloneable은 어떤 클래스를 복제해도 된다는 사실을 알리기 위해서 만들어진 믹스인 인터페이스(아이템20)이다. Java의 Cloneable 인터페이스를 보면 아무런 메소드가 보이지 않지만 사실 Object의 clone() 메소드의 동작방식을 결정하고 있다. By convention, classes that implement this interface should override Object.clone (which is protetected) with a pulibc method. See {@link java.lang.Object#clone()} for details on overriding this method. 그럼 Cloneable의 목적을 자세히 살펴보자. 다시 말해, Cloneable의 인터..

Java/Effective Java 2020. 8. 10. 23:35
[이펙티브 자바] 아이템 04.인스턴스화를 막으려거든 private 생성자를 사용하라(Re)

어떤 시스템을 개발하다면 보면 정적 메서드와 정적 필드만을 담는 클래스를 만들어야 하거나 만들고 싶을 때가 있다. 예를 들면, java.lang.Math와 java.util.Arrays 클래스처럼 기본 타입 값이나 배열에 관련된 메서드들만 모아 둘수도 있다. 아래 코드는 Math 클래스의 일부분이다. public final class Math { private Math() {} public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; private static final double DEGREES_TO_RADIANS = 0.017453292519943295; priv..

Java/Effective Java 2020. 7. 19. 21:54
[이펙티브 자바] 아이템 03. private 생성자나 열거 타입을 싱글턴임을 보증하라(Re)

싱글턴이란 모두가 알고 있듯이, 오직 하나의 인스턴스만을 생성할 수 있는 클래스를 말한다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 그 이유는 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 mock 구현으로 대체할 수 없기 때문이다. (이유는? https://bottom-to-top.tistory.com/30 참고) [아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라 아이템 3 private 생성자나 열거타입으로 싱글턴임을 보증하라 p.23 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의한 다음 �� bottom-to-to..

Java/Effective Java 2020. 7. 19. 21:52
[이펙티브 자바] 아이템 02.생성자에 매개변수가 많다면 빌더를 고려하라.(Re)

정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기가 어렵다는 점이 있다. 그럼 이런 선택적 매개변수가 많을 때 클래스는 어떤 식으로 대응을 할까? 점층적 생성자 패턴 사용 점층적 생성자 패턴은 필수 매개변수만 받는 생성자와 선택 매개변수를 받는 생성자 여러개를 모두 두어 클라이언트가 요구하는 사항에 따라 객체를 생성하는 패턴 방식이다. public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g..

Java/Effective Java 2020. 7. 19. 21:47
이전 1 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • Effective Java
  • 빈 순환 참조
  • JPA
  • @Lazy
  • springboot
  • 생성자
  • java
  • java8
  • 이펙티브자바
  • 이펙티브 자바
  • 김영한
  • try with resources
  • mustache
  • 빌더 패턴
  • 인프런
  • 점층적 생성 패턴
  • 자바8
  • 연관관계
  • effectivejava
  • package-private
  • junit
  • 정적팩터리메서드
  • 복사 팩토리
  • try catch finally
  • flatMap
  • 스프링부트
  • Spring
  • ifPresent
  • 팩토리 메소드 패턴
  • jdk버전
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

티스토리툴바