제네릭 사용이유
1. 재사용성2. 타입 안전성 제네릭의 핵심사용할 타입을 미리 결정하지 않는다는 점이다.(클래스를 정의하는 시점에 결정하는 것이 아니라 실제 사용하는 생성 시점에 타입을 결정하는 것) 제네릭 타입GenericBox 를 제네릭 타입이라 한다.GenericBox 에서 T를 타입 매개변수라 한다. 한번에 여러 타입 매개변수를 선언할 수 있다.class Data {}타입인자는 기본형은 사용할 수 없으며, 래퍼 클래스를 사용해야한다. class Data{} 타입 매개변수로 값의 범위를 예측할 수 있다.1. Animal의 자식이 들어올것이라고 예상할 수 있다. (Object와 모든 객체가 들어오는 상황을 대비가능)2. Animal에서 정의한 메서드를 사용해서 미리 구현이 가능하다. 제네릭 메서드 T genericM..
2024.10.02
메모리 가시성
캐시 메모리의 runFlag를 읽는다. 메인 메모리가 아닌 캐시 메모리의 값만 바뀐다. 메인 메모리에 반영은 언제 될까? 모른다. 평생 안될수도 있다. 그럼 언제 값이 변경될까? 컨텍스트 스위칭이 될때 변경이 된다. (높은 확률로 갱신 되는데 안될수도 있다.) 이런 문제를 메모리 가시성이라고 한다 이런 문제를 해결 하는게 volatile 단 성능문제가 생길수있다. 근데 volatile을 사용안하고 메인메모리의 값이 바뀔수 있다.그건 컨텍스트 스위칭이 가끔 일어나서 그런것인데, 이건 장담할수없다. 그러니 확실한 volatile을 사용하는게 맞다. 그런데 console에 값이 딱 맞게 어떻게 떨어질까?콘솔 찍힐때 컨텍스트 스위칭 되기 때문임 근데 이건 정확한건 아님 volatile은 꼭 써야할때 써야한다.성..
2024.09.20
no image
스레드 기본 정보
//main 스레드Thread mainThread = Thread.currentThread();log("mainThread = " + mainThread);log("mainThread.threadId()" + mainThread.threadId()); //자바에서 고유값 정함log("mainThread.getName()" + mainThread.getName()); //사용자가 정할 수있음log("mainThread.getPriority()" + mainThread.getPriority()); //우선 순위 기본이 5 우선순위가 높을수록 많이 사용된다함log("mainThread.getThreadGroup()" + mainThread.getThreadGroup());log("mainThread.getSt..
2024.09.18
no image
스레드 생성과 실행
Java에서 Thread를 생성하는 방법엔 Thread 클래스 상속/Runnable 인터페이스 구현 두가지 방법이 있다.public class HelloThread extends Thread{ @Override public void run() { System.out.println(Thread.currentThread().getName() + ": run 실행"); }}public class HelloThreadMain { public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + ": main() start"); HelloThread h..
2024.09.16
no image
프로세스와 스레드란
멀티프로세싱컴퓨터 시스템에서 둘 이상의 프로세서(CPU 코어)를 사용하여 여러 작업을 처리하는 기술이며 동시에 많은 작업을 처리 멀티태스킹동시에 여러 작업을 수행하는 것이를 위해 운영체제는 스케줄링 기법을 사용하며, 스케줄링은 CPU 시간을 여러 작업에 나누어 배분하는 방법 멀티프로세싱 / 멀티태스킹 멀티프로세싱   - 여러 CPU를 사용하여 동시에 여러 작업을 수행   - 하드웨어 기반으로 성능 향상 (CPU니깐) 멀티태스킹   - 단일 CPU가 여러 작업을 동시에 수행 프로세스프로그램이 실행되면 프로세스가 만들어지며 프로그램이 실행 (클래스를 인스턴스 했을때를 생각하면됨)실행 중인 프로그램의 인스턴스하나의 스레드를 반드시 포함각 프로세스는 독립적인 메모리 공간을 가지며, 운영체제에서 독립된 실행 단위..
2024.09.16
래퍼, Class 클래스란
JAVA TYPE기본형과 참조형이 있다. 기본형의 한계객체 내부에는 유용한 메서드를 포함하는데 사용 불가능값이 없는 경우를 표현해야 할 때 불가능 (기본형은 무조건 값을 갖고있음)래퍼 클래스란java.lang 패키지의 클래스들 중 기본형 변수를 감싸는 클래스※기본형 int, float, double, boolean 등래퍼 클래스 사용방법Integer i = new Integer(10); // 향후 자바에서 제거될 예정Integer i = Integer.valueOf(10); // Boxing 이렇게 사용i.intvalue(); //Unboxing 래퍼클래스 비교는 equals() 사용래퍼클래스 객체 그대로 출력시 내부에서 toString()으로 출력Auto-Boxing, Auto-Unboxing개발자..
2024.05.30
String이란
String의 문자열은 아래와 같이 value에 저장된다. (Java 버전에 따라 방식이 달라짐)// Java9 이전private final char[] value;// Java9 이후private final byte[] value;※ 자바에서 문자를 표현할때는 2byte를 사용. 영어 및 숫자는 1byte로 표현이 가능그래서 영어, 숫자로만 이뤄져있을시 1byte를 사용하고 그렇지않으면 2byte로 사용하기로 되어 효율적으로 변경 String은 참조형타입이다.문자열 비교를 할때는 ==가 아닌 equals() 메서드를 사용하여야 한다.String str1 = new String("hello");String str2 = new String("hello");System.out.println("new Stri..
2024.05.29