토마토의 개발일지
  • 홈
  • 태그
  • 방명록
  • 메뉴 닫기
  • 글작성
  • 방명록
  • 환경설정
    • Development (144)
      • Languege (39)
        • Java & Spring (27)
        • C# & ASP.NET (5)
        • JavaScript (2)
        • Kotlin (5)
      • DB (0)
        • Oracle (0)
      • Study (72)
        • 네트워크 (3)
        • 이펙티브 자바 (41)
        • 우아한 테크 코스 (7)
        • Next Step (3)
        • Certificate (5)
        • Side Proejct (6)
      • Error (18)
        • 개발환경 (10)
        • 트러블슈팅 (6)
      • Algorithm (12)
      • 개발환경 (1)
      • 회고 (2)
  • 홈
  • 태그
  • 방명록
Study/이펙티브 자바

[Effective Java] 스레드 안전성 수준을 문서화하라

💥 개요한 메서드를 여러 스레드가 동시에 호출할 때 그 메서드가 어떻게 동작하느냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 중요한 계약과 같다. 아무 언급도 없으면 가정을 해야하고, 그 가정이 틀리면 동기화를 충분히 못하거나 지나치게한 상태일 것이며, 두 가지 심각한 오류로 이어질 수 있다. ⚠️ 자바독 기본 옵션 생성 API 문서는 synchronized가 포함되지 않는다.메서드 선언에 synchronized 한정자를 선언할지는 구현 이슈일 뿐 API에 속하지 않는다.멀티 스레드 환경에서도 API를 안전하게 사용하게 하려면 클래스가 지원하는 스레드 안전성 수준을 정확히 명시해야 한다. 일반적인 경우 스레드 안전성이 높은 순서는 아래와 같다.불변(immutable) : 이 클래스의 인스턴스는 마..

2024. 5. 20. 21:11
Study/이펙티브 자바

[Effective Java] 공개된 API 요소에는 항상 문서화 주석을 작성하라

💥 개요 API를 작성함에 있어서 잘 작성된 문서는 중요하다. 공식 언어 명세에는 없지만 자바 프로그래머라면 알아야하는 업계 표준 API라 할 수 있다. 자바에서는 이 귀찮은 작업을 자바독이라는 유틸리티가 도와준다. https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html How to Write Doc Comments for the Javadoc Tool Javadoc Home Page This document describes the style guide, tag and image conventions we use in documentation comments for Java programs written at Java Sof..

2024. 3. 18. 21:34
Study/이펙티브 자바

[Effective Java] 스트림 병렬화는 주의해서 적용하라

💥 개요 자바에서 동시성 프로그램을 작성하기가 점점 쉬워지고 있지만, 이를 올바르고 빠르게 작성하는 일은 어렵다. 동시성 프로그래밍을 할 때는 안정성(safety)과 응답 가능(liveness) 상태를 유지하기 위해 애써야 하는데, 병렬 스트림 파이프라인 프로그래밍에서도 다를 바 없다. ☠️ 스트림을 잘못 사용하는 예 아이템 45에서 다룬 메르센 소수를 생성하는 프로그램을 살펴보자 public class MersennePrimes { static Stream primes() { return Stream.iterate(TWO, BigInteger::nextProbablePrime); } public static void main(String[] args) { primes().map(p -> TWO.pow(..

2024. 2. 21. 18:55
Study/이펙티브 자바

[Effective Java 3E] 배열보다는 리스트를 사용하라

💥 개요 배열과 제네릭 타입에는 중요한 차이가 두가지 있다. 배열의 경우 Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Superp[]의 하위 타입이 된다.(공변) 하지만 제네릭은 불공변이다. List가 List의 하위 타입이 아니다.(불공변) 그럼 제네릭이 더 안 좋은걸까? 배열의 문제점 Object[] objectArray = new Long[1]; objectArray[0] = "타입이 달라 넣을 수 없다."; // ArrayStoreException을 던진다. 위의 코드는 런타임에 실패한다. 하지만 다음 코드는 컴파일 시점에 실패한다. List ol = new ArrayList(); // 호환되지 않는 타입이다. ol.add("타입이 달라 넣을 수 없다."); 어느쪽이든 문자열을 넣..

2023. 11. 10. 22:01
Study/이펙티브 자바

[Effective Java 3E] 로 타입은 사용하지 말라

💥 개요 한글 용어 영문 용어 예시 매개변수화 타입 parameterized type List 실제 타입 매개변수 actual type parameter String 제네릭 타입 generic type List 정규 타입 매개변수 formal type parameter E 비한정적 와일드카드 타입 unbounded wildcard typ List 로 타입 raw type List 한정적 타입 매개변수 bounded type parameter 재귀적 타입 한정 recursive type bound 한정적 와일드카드 타입 bounded wildcard type List에는 (null 외에는) 어떤 원소도 넣을 수 없다. 다른 원소를 넣으려 하면 컴파일 시점에 오류가 발생한다. @Test void 와일드카드타..

2023. 11. 1. 20:57
Study/이펙티브 자바

[Effective Java 3E] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

💥 개요 이따금 인스턴스 필드들을 모아놓는 일 외에는 아무 목적도 없는 퇴보한 클래스를 작성하려 할 때가 있습니다. class Point { public double x; public double y; } 이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못합니다. API를 수정하지 않고 내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없습니다. 철저한 객체 지향 프로그래머는 이런 클래스를 싫어해 모두 private으로 필드를 변경하고 public 접근자(getter)를 추가합니다. class Point { private double x; private double y; public Point(double x, dou..

2023. 9. 9. 14:32
  • «
  • 1
  • 2
  • »

공지사항

  • GitHub & WorkSpace

전체 카테고리

  • Development (144)
    • Languege (39)
      • Java & Spring (27)
      • C# & ASP.NET (5)
      • JavaScript (2)
      • Kotlin (5)
    • DB (0)
      • Oracle (0)
    • Study (72)
      • 네트워크 (3)
      • 이펙티브 자바 (41)
      • 우아한 테크 코스 (7)
      • Next Step (3)
      • Certificate (5)
      • Side Proejct (6)
    • Error (18)
      • 개발환경 (10)
      • 트러블슈팅 (6)
    • Algorithm (12)
    • 개발환경 (1)
    • 회고 (2)
애드센스 광고 영역
  • 최근 글
  • 최근 댓글

최근 글

최근댓글

태그

  • #AWS
  • #spring boot
  • #코틀린
  • #Java
  • #우테코
  • #김영한 스프링
  • #BOJ
  • #이펙티브자바
  • #파이썬
  • #kotlin
  • #개발자
  • #김영한
  • #백준
  • #도메인 주도 개발
  • #트러블슈팅
  • #제네릭
  • #백엔드
  • #TDD
  • #effective java
  • #자바
  • #스프링부트
  • #클라우드
  • #객체지향
  • #스프링
  • #이펙티브 자바
  • #spring
  • #구글 클라우드
  • #후기
  • #GCP
  • #saa
MORE

전체 방문자

오늘
어제
전체

블로그 인기글

Powered by Privatenote Copyright © 토마토의 개발일지 All rights reserved. TistoryWhaleSkin3.4

티스토리툴바