본문 바로가기

자바28

djb2 문자열 해시 함수 djb2는 문자열 해시 함수중 간단하면서 무작위 분포를 만드는데 뛰어나다고 알려져 있다. int djb2(char[] arr) { int hash = 5381; for (int i = 0; i < arr.length; i++) { hash = (((hash 2022. 3. 4.
[Java] ThreadLocal ThreadLocal 여러 쓰레드가 같은 인스턴스 필드의 값을 변경하는 상황에 발생하는 동시성 문제를 해결하는 방법으로 자바는 언어 차원에서 ThreadLocal이라는 것을 제공한다. ThreadLocal은 각 쓰레드 별로 전용 내부 저장소를 만들어 값을 관리하는 방법으로 동시성 문제를 해결한다. ThreadLocal 사용법 ThreadLocal threadLocal = new ThreadLocal(); //데이터 저장 threadLocal.set("Hello"); //데이터 조회 threadLocal.get(); //데이터 삭제(쓰레드 로컬의 모든 값을 삭제하는 것이 아닌 해당 쓰레드의 값만 삭제) threadLocal.remove(); set을 하면 해당 쓰레드 전용 저장소에 값이 저장되고, get을.. 2021. 12. 30.
[자바8] Effectively final Effectively final 자바 8에서 도입된 Effectively final이란 final 키워드가 붙지 않은 변수가 사실상 final인 경우를 말한다. 즉, final 변수가 아님에도 불구하고 값이 변경되지 않는다면 그 변수는 Effective final이라고 할 수 있다. 자바8 이전에는 내부 클래스, 익명 클래스에서 외부 변수를 참조할 시 그 변수가 반드시 final 변수여야 했다. 자바8의 Effectively final 도입으로 final 키워드가 붙지 않은 변수라도 값이 어디에서도 변경되지 않는다면 final 변수처럼 내부 클래스, 익명 클래스, 람다 표현식에서 참조할 수 있게 되었다. public class Main { public void method() { //final 키워드가 .. 2021. 7. 7.
[자바] 문자열 뒤집기 - StringBuilder.reverse() StringBuilder : 내부에 버퍼를 가지고있어 변경 가능한 문자열을 만들때 사용한다. StringBuilder.reverse 메서드를 사용하여 문자열을 뒤집을 수 있다. 예제 코드 문자열 "Hello"를 뒤집는 예제 코드이다. class Main { public static void main(String[] args) throws IOException { String s = "Hello"; StringBuilder sb = new StringBuilder(s); String reverse = sb.reverse().toString(); System.out.println(reverse); //출력 결과 : olleH } } 2021. 7. 5.
[자바] 직렬화(Serialization) - Serializable, ObjectInputStream, ObjectOutputStream, Transient, serialVersionUID 직렬화란? 직렬화란 객체를 데이터 스트림으로 만드는 것이다. 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것이다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것은 역 직렬화(deserialization)라고 한다. 객체는 클래스 변수나 메서드가 포함되지 않는 인스턴스 변수의 집합이다. 그렇기 때문에 객체를 저장한다는 것은 인스턴스 변수의 값을 저장한다는 것과 같다. 저장했던 객체를 다시 생성하려면, 객체를 생성하고 저장했던 값을 읽어서 인스턴스 변수에 저장하면 된다. 이러한 과정이 프리미티브 타입의 기본형 변수라면 간단할 것 같지만, 배열이나 참조형 같은 경우에는 간단하지 않을 것 같다. 하지만, ObjectInputStream, ObjectOutputStream을 사용.. 2021. 5. 22.
[자바 스터디] 14주차 과제 - 제네릭(Generic) 본 게시글은 백기선 님의 live-study 과제를 수행하면서 작성한 글입니다. 목표 자바의 제네릭에 대해 학습하세요. 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메서드 만들기 Erasure 제네릭이란? JDK1.5에 도입된 제네릭은 다양한 타입의 메서드나 컬렉션 클래스에 컴파일 시에 타입을 체크해주는 기능이다. 객체의 타입을 컴파일 시에 체크해줌으로써 의도치 않은 타입의 객체가 저장되는 것을 막아 타입 안정성을 높이고, 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다. 간단히 이야기하면 사용할 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄여준다. 제네릭의 장점 타입 안정성을 제공한다. 타입 체크와 형변환을 생략할 수 있다. 제네릭 .. 2021. 2. 26.