Java 18

스레드 - interrupt()

스레드의 작업을 중간에 중단하는 방법flag값 설정 및 수정interrupt() 사용 flag값 설정특정 스레드의 실행을 flag 값이 true인 동안 계속해서 작업하도록 설정한다특정 스레드를 중단하는 시점에 flag 값을 false로 바꾼다이렇게 하면, 다음 반복문 실행 시점에 flag 값을 확인하고 해당 작업을 빠져 나온다static class MyTask implements Runnable { volatile boolean runFlag = true; @Override public void run() { while (runFlag) { log("작업 중"); sleep(3000); } log("자원 정리")..

스레드 - join()

join()특정 스레드가 다른 스레드들의 작업이 끝난 후, 무언가를 종합해서 하고 싶다면 join() 메소드를 사용해주면 된다. ex)스레드1 - 1 ~ 50의 합을 구한다스레드2 - 51 ~ 100의 합을 구한다메인 - 스레드1,2의 결과값의 합을 구한다 public static void main(String[] args) { log("start"); SumTask task1 = new SumTask(1, 50); SumTask task2 = new SumTask(51, 100); Thread thread1 = new Thread(task1, "task1"); Thread thread2 = new Thread(task2, "task2"); ..

스레드 제어

쓰레드 기본 정보스레드 ID - 스레드의 고유 식별자, 스레드 생성 시 할당되고, 지정할 수 없다.스레드 이름 - 내가 지정할 수 있고, 중복될 수 있다.스레드 우선순위 - 1(낮음) ~ 10(높음), 기본값은 5, 절대적인 실행순서는 아니다.(힌트)힌트라는 말은, 스케줄러가 '참고'하는 대상으로 인식한다는 정도스레드 그룹 - 스레드가 속한 그룹, 자주 사용하지는 않음부모 스레드 - 모든 스레드는(main 제외) 누군가가 생성해준다. 나를 생성해준 스레드가 부모 스레드스레드 상태 - 스레드의 현재 상태NEW - 스레드가 생성되고 아직 실행되진 않은 상태RUNNABLE - 스레드를 실행중이거나, 실행될 준비가 된 상태BLOCKED - 동기화 락을 기다리는 상태WATING - 다른 스레드의 작업이 완료되기를..

제네릭

제네릭이 필요한 이유( Box 예제 ) 타입 안전성을 높이면서, 코드를 재사용하기 위해  Integer 변수 value를 set, get을 할 수 있는 IntegerBox 클래스 생성public class IntegerBox { private Integer value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}  String 변수 value를 set, get을 할 수 있는 StringBox 클래스 생성public class StringBox { private String value; public void set(Str..

스레드의 생성과 실행

스레드의 생성Runnable 인터페이스 구현을 사용하자Thread 클래스 상속Runnable 인터페이스 구현 스레드는 Thread 클래스를 상속해서 만들거나, Runnable 인터페이스를 구현하는 방법으로 생성할 수 있다.실무에서는 Runnable 인터페이스를 구현하는 방법을 선호한다.Thread 클래스를 상속하는 경우, 다른 상속이 있는 경우에는 사용할 수 없다( 다중 상속 X )따라서, 스레드와 실행할 작업을 명확히 나누어서 개발할 수 있는 Runnable 방식을 사용한다.  스레드 생성 - Thread 클래스 상속Thread 클래스 상속 후 run() 메소드를 오버라이딩한다.public class HelloThread extends Thread { @Override public void ..

프로세스와 스레드

멀티태스킹하나의 컴퓨터 시스템이 동시에 여러작업을 수행하는 능력소프트웨어적 관점( 무지하게 빠른 CPU를 잘 활용해보자는 )CPU가 빠르게 여러가지 프로그램의 코드를 번갈아가며 실행하여, 동시에 실행되는 것 처럼! 멀티프로세싱둘 이상의 프로세서(CPU 코어)를 사용하여 동시에 여러 작업을 동시에 처리하는 기술하드웨어적 관점( 코어의 갯수가 여러가지 )코어의 갯수만큼은 동시에 프로그램을 실행할 수 있는 것! 프로세스실행중인 프로그램프로그램이 클래스라면, 프로세스는 인스턴스프로세스별 독립적인 공간 보유코드섹션, 데이터 섹션, 힙, 스택으로 구분( 스택은 스레드별로 주어지고, 나머지는 프로세스별로 주어진다! )스레드를 실행하기 위한 컨테이너의 느낌으로 생각하면 된다 스레드프로세스 내에서 반드시 하나 이상 존재..

[김영한의 실전 자바 - 기본편] 상속 정리

상속기존 클래스의 속성과 기능을 그대로 물려받는다기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다extends 키워드를 사용한다(extends 대상은 하나만 선택 가능, 다중 상속 불가)부모 클래스(슈퍼 클래스) : 상속을 통해 자신의 필드와 메서드를 다른 클래스에게 제공자식 클래스(서브 클래스) : 부모 클래스로부터 필드와 메서드를 상속받는 클래스 상속 예제Car 클래스는 move() 라는 메소드를 가진다.ElectricCar 클래스는 move() 메소드를 사용할 수 있고, charge() 메소드를 가진다.GasCar 클래스는 move() 메소드를 사용할 수 있고, fillUp() 메소드를 가진다.Car 클래스를 부모 클래스로, ElectricCar, GasCar 클래스를 자식 클래스로..

[김영한의 실전 자바 - 기본편] 자바 메모리 구조

메모리 구조자바의 메모리 구조는 메서드, 스택, 힙 영역으로 구분할 수 있다. 메서드 영역(Method Area)클래스 영역이라고도 하며, 클래스 레벨의 정보를 저장한다(클래스, 인터페이스, 메서드, static 변수, 상수)프로그램을 실행하는데 필요한 공통 데이터를 관리프로그램의 모든 영역에서 공유클래스 영역 - 모든 실행 코드가 저장되어 있는 공간Static 영역 - static 변수들을 보관런타임 상수 풀 - 공통 리터럴 상수나 효율적인 관리를 위해 사용하는 상수를 보관 프로그램에서 같은 클래스에서 생성되는 객체 A, B가 각각 메소드 a를 호출한다고 생각해보자.객체마다 같은 메소드인 a를 따로 가지고 있다면, 이는 비효율적인 메모리 구조일 것 이다.( 100개의 객체가 똑같은 메소드를 각각 ..

[김영한의 실전 자바 - 기본편] 기본형과 참조형

기본형과 참조형기본형과 참조형 또한 자바를 공부하면서 반드시 이해하고 넘어가야 하는 내용이다.내용 자체는 어렵지 않지만, 헷갈릴 수 있기 때문에 한번 정리하고 넘어간다.이 차이를 이해해야 메모리 구조나 NullPointerException같은 에러를 알 수 있다. 기본형 = 값 자체를 저장하는 타입참조형 = 객체의 주소(참조)를 저장하는 타입기본형(Primitive Type)int, long, double, boolean과 같이 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입 참조형(Reference Type)클래스, 배열과 같이 데이터에 접근하기 위한 주소값을 저장하는 데이터 타입( Student student, int[] students ) 기본형은 변수에 값을 직접 넣어서,참조형은 변수에 주소..

[김영한의 실전 자바 - 기본편] 클래스

클래스필드와 메소드로 구성되어 객체를 정의하는 역할 자바에서 클래스란 객체를 정의하는 틀, 설계도와 같은 의미로 사용된다.이 틀을 가지고, 객체를 생성하여 사용한다. 클래스는 객체의 상태를 나타내는 필드, 객체의 행동을 나타내는 메소드로 구성된다.필드는 객체에 포함되어 있는 변수를, 메소드는 함수와 같이 특정 작업을 수행하기 위해서 사용하는 집합체라고 할 수 있다 클래스가 필요한 이유?먼저 다음 예시를 살펴보자.3개의 변수를 활용해서 간단히 학생의 정보를 입력하고, 이를 출력하는 코드이다.학생마다 다른 변수를 사용해야하기 때문에, 학생이 늘어날때마다 계속해서 서로 다른 3개의 변수를 추가해주어야 한다.public static void main(String[] args) { String stude..