JAVA 썸네일형 리스트형 item 13) clone 재정의는 주의해서 진행하라 1. Cloneable 인터페이스 /** * A class implements the Cloneable interface to * indicate to the {@link java.lang.Object#clone()} method that it * is legal for that method to make a * field-for-field copy of instances of that class. * * Invoking Object's clone method on an instance that does not implement the * Cloneable interface results in the exception * CloneNotSupportedException being thrown. * * B.. 더보기 item 12) toString을 항상 재정의하라 1. toString 함수란? toString 함수는 프로그래머가 객체를 잘 읽을수 있도록 대표적인 특성을 보여주는 함수이다. 하지만 Object의 toString 함수는 전혀 그런 특징을 보여주지 못하고 있다. Object의 toString 함수는 내부적으로 클래스 이름과 hashCode를 합한 문자열을 리턴하게 되어있는데 이것만으로는 객체의 특성을 파악하는데 부족하다. 프로그래머는 자신이 정의한 객체의 toString 함수를 재정의함으로써 프로그램 디버깅을 하기 더 쉽기 떄문에 이것을 재정의하는 것을 추천한다. public String toString() Returns a string representation of the object. In general, the toString method ret.. 더보기 HashMap 의 capacity와 load factor HashMap은 Collections의 Map 인터페이스를 구현한 구현체로 해시 테이블을 바탕으로 만들어진다. HashMap의 특징은 순서가 아니라 수행시간에 전적으로 몰빵했다는 점이다. add,remove, find에 O(1)의 시간만 필요하다. (TreeMap O(logN) HashMap은 전적으로 Hash 함수 (hashCode)에 의존하여 그 hash 함수가 원소들을 diverse하게 할수록 성능이 좋아진다. HashMap 외부에서 볼떄는 항상 같은 형태를 띌거라고 생각하지만 사실은 그렇지 않다. capacity와 load factor라는 변인을 가지고 동적으로 변화한다. capacity 는 해시테이블의 버킷수다. load factor는 해시테이블의 버킷이 얼마나 가득 찼는지 보여주는 수치다. 참.. 더보기 item 11) equals를 재정의하려거든 hashCode도 재정의하라 1. hashCode 재정의의 필요성 다음 코드를 살펴보자 package item11; import java.util.HashSet; import java.util.Objects; import java.util.Set; public class PersonTest { static class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { //멤버변수 비교하는 equals만 재정의 if (this == o) return true; if (o == null || getClass() != o.ge.. 더보기 item 10) equals는 일반 규약을 지켜 재정의하라 1. Object.equals equals 메소드는 Object 클래스의 메소드로 객체의 동치성을 판별하기 위한 메소드이다. 특히 Collections 패키지의 Set , Map의 key 등에서 key의 동치성을 판별하기 위해 자주 사용된다. public boolean equals(Object obj) { return (this == obj); } 위 코드는 Object equals의 정의이다. 보다시피 객체의 레페런스 값을 비교한다. 그러므로 Object 클래스를 상속받은 클래스에서 equals를 재정의하지 않는다면 클래스 멤버변수가 같더라도 레퍼런스 값이 다르면 equals는 false를 리턴한다. 이러한 특징때문에 equals를 재정의하게 되는데 Collections의 Set, Map의 키 등은 전.. 더보기 Item 1) 생성자 대신 정적 팩토리 메소드를 고려하라 1. 정적 팩토리 메소드란 ? 정적 팩토리 메소드(Static Factory Method)란 보다 명시적으로 객체를 생성하는 클래스 메소드다. 대표적으로 java.time.LocalTime에서 이 것을 찾을 수 있다. //----------------------------------------------------------------------- /** * Obtains an instance of {@code LocalTime} from an hour and minute. * * This returns a {@code LocalTime} with the specified hour and minute. * The second and nanosecond fields will be set to zero. *.. 더보기 ThreadLocal 1. ThreadLocal 이란? Java.lang 패키지에서 제공하는 쓰레드 스코프 데이터 저장소 같은 쓰레드 scope 내에서 데이터 공유 사용방법은 간단하다. ThreadLocal를 객체를 선언하고 get(),set(),remove() 메소드를 이용하여 저장하면 된다. package com.ssafy; public class Test { static ThreadLocal threadLocal; public static void main(String[] args) throws Exception { threadLocal = new ThreadLocal(); Thread thread1 = new Thread(()-> { threadLocal.set("111"); System.out.println(thre.. 더보기 Java 멀티쓰레드 동기화 - (3) AtomicClass https://wjdtn7823.tistory.com/65 https://wjdtn7823.tistory.com/67 Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cach wjdtn7823.tistory.com Java 멀티쓰레드 동기화 - (2) Synchronized Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 이번에는 synchronized 키워드에 대해 얘기해보겠습니다. https://wjdtn7823.tistory.com/6.. 더보기 이전 1 2 3 4 5 6 다음