Java 썸네일형 리스트형 JVM 언어 의 공변 1. 공변이란? 제네릭에서는 3가지 공변 성질을 제공한다. 공변(Variance) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이면 T가 공변의 성질을 가지고 있다고 말한다. 반공변(Contravariance) : A가 B의 하위 타입일 떄, T가 T 의 하위 타입이면 T가 반공변의 성질을 가지고 있다고 말한다. 무공변(Invariance) A가 B의 하위 타입일 때, T와 T간의 아무 관계도 없다면 무공변이라고 말한다. 이러한 공변, 반공변, 무공변으로 메소드의 인자로 들어오는 파라미터의 타입에 제한을 걸수 있다. 공변의 경우 Java에서는 extends, Kotlin에서는 out이라는 키워드를 사용한다.(Producer패턴 : 해당 타입을 생산하는 패턴에 사용) 반공변의 경우 Java에서는 .. 더보기 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 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cache가 아닌 메인 메모리에다가 한다고 명시적으로 선언하는 것이다. 보통의 메모리 구조는 아래와 같이 생겼다. CPU 내에는 성능 향상을 위해서 L1 cache가 내장 되어있습니다. 쓰레드에서 같은 변수를 참조하려고 해도 쓰레드마다 다른 캐시를 참조하기 떄문에 불일치 문제가 생깁니다. 이해하기 쉽게 한쪽 쓰레드에서는 flag 를 검사하는 쓰레드(쓰레드 1), 한쪽 쓰레드에서는 flag의 값을 바꾸는 (쓰레드2) 2개의 쓰레드를 만들었습니다. public class T.. 더보기 StringBuilder vs StringBuffer Java의 String은 Immutable하므로, 문자열을 변경할경우 계속해서 새롭게 객체를 할당해야하므로 메모리 효율성부문에서 좋지 않다.(Garbage 객체가 계속해서 생길것이다.) 이를 보완한 것이 StringBuilder와 StringBuffer이다. 이에 대해서 알아보자 1. Mutable(가변성) String과 다르게 StringBuilder, StringBuilder 모두 mutable하다. 즉 가변성이 있다. append, delete, insert 등을 이용하여 문자열을 바꾸더라도 객체를 따로 생성하지 않고 기존 객체를 이용한다. 그러므로, 문자열 추가, 수정,삭제를 빈번하게 사용해야 할 경우 String이 아닌 StringBuilder, StringBuffer를 사용해야한다. 2. St.. 더보기 Java String 우리는 문자열을 나타내는데 자바 스트링 객체를 많이 쓰지만, 사실 잘 알고 쓰는 사람은 별로 없는거 같다. 1) 스트링 리터럴? 스트링 객체? JAVA 에는 문자열을 선언하는 두가지 방법이 있고 우린 혼용하지만 내부적인 구현은 완전히 다르다. String s1 = new String("Boo"); String s2 = "Boo"; 첫번쨰는 new 연산자를 이용하여 Heap 영역에 할당하는 것이고, 두번째는 String Constant Pool 이라는 특별한 상수 영역에 할당하는 것이다. 즉 s1 과 같은 방식으로 만들면 heap 계쏙해서 각각의 인스턴스를 생성하기 떄문에 다른 주소의 객체이나 s2와 같은 리터럴 방식으로 초기화 하면 String Constant Pool을 먼저 그 문자열이 있는지 체크하고.. 더보기 JAVA 클래스의 == , equals 에 대해 알아보자 [Java] Integer.valueOf(127) == Integer.valueOf(127) 는 참일까요? : TOAST Meetup [Java] Integer.valueOf(127) == Integer.valueOf(127) 는 참일까요? meetup.toast.com JAVA 에는 primitive type 과 reference type이 있다. primitivte type는 값 자체를 가지고 있는 변수고, (int float, ....) reference type는 값을 저장하는 주소를 가지고 있다. (Class , Collections 등등) 그러므로 C나 C++ pointer를 이용해서 call by reference를 적용시켰지만, java에서는 reference 자체를 넘기면 call by .. 더보기 이전 1 다음