목록Backend/자바 (52)
개발 무지렁이
𐁍 스레드 동기화 멀티스레드는 공유객체에 서로 접근할 수 있다. 다른 스레드에 의해 공유객체의 내부데이터가 쉽게 변경되기 때문에, 하나의 스레드가 접근할 때, 다른 스레드가 접근하지 못하도록 작업이 끝날 때까지 객체에 잠금(Lock🔒)을 걸어야 한다. (그렇지 않으면 의도치 않은 결과가 나올 수 있다.) 이를 위해, 자바는 동기화 메서드 및 동기화 블록을 제공한다. ➼ 🦔 동기화 메서드 및 동기화 블록 ⚠️ 공유객체 내부에 동기화 메서드 및 동기화 블록을 정의해 놓는다. 🕹️ 동기화 메서드 (동기화 메서드를 실행하는 즉시, 🔒객체잠금이 일어나고, 실행이 끝나면 잠금이 풀린다.) public synchronized void method() { //하나의 스레드만 실행할 수 있는 영역 } 🍫 동기화 블록 (..
➼ 🦔 스레드(Thread) 이름 지정 thread.setName("[스레드 이름]") ⚠️ 스레드 이름을 지정하지 않으면 "Thread-n" ⭐ 어떤 스레드가 현재 코드를 실행하고 있는지 check Thread thread = Thread.currentThread(); System.out.println(thread.getName()); 𐁍 스레드 상태 ⚠️ 스레드 객체를 생성하고, start() 메서드를 호출하면, 바로 스레드가 실행되는 것이 아니다. 실행대기상태(RUNNABLE)로 넘어가고, CPU 스케쥴링에 따라, 해당 스레드가 CPU를 점유할 때 run() 메서드를 실행한다. 이 때 실행상태(RUNNING)가 되며, 스레드는 RUNNABLE과 RUNNING을 번갈아가며 run() 메서드를 조금씩 ..
𐂂 운영체제(os)는 실행중인 프로그램을 프로세스로 관리한다. 운영체제는 멀티프로세스를 생성해서 처리하지만, 하나의 프로세스 내에서 멀티태스킹을 할 수도 있다. 하나의 프로세스가 두가지 이상의 작업을 처리할 수 있는 이유는 멀티스레드가 있기 때문이다. 𐁍 '스레드' 란 코드의 실행흐름을 말한다. 멀티스레드는 하나의 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면, 프로세스가 종료되므로 다른 스레드에 영향을 미친다. ⚠️ 멀티스레드를 사용하는 경우 예외처리에 신경써야한다. ⚠️ 멀티스레드에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다. ➼ 🦔 모든 자바 프로그램은 메인스레드가 main메서드를 실행하면서 시작된다. 멀티스레드로 실행하는 프로그램을 개발하려면 먼저, ..
𐂂 '제네릭' 이란 결정되지 않은 타입을 파라미터로 처리하고, 객체를 생성할 시점에, 파라미터를 구체적인 타입으로 대체시키는 기능 𐁍 '제네릭 타입' 이란 결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. (⚠️ 타입파라미터는 기본적으로 Object타입으로 간주된다.) public class Box { public T content; } Box box = new Box(); //사용할 때는 구체적인 타입으로 대체 𐁍 '제네릭 메서드' 란 타입파라미터를 가지고 있는 메서드를 말한다 public Box boxing(T t) { ... } 🤡 타입파라미터 제한 public Box boxing(T t) { ... } public Box boxing(T t) { ... } ⭐ 타입파라미터로 와..
𐂂 어노테이션이란 클래스 OR 인터페이스를 컴파일하거나 실행할 때, 어떻게 처리하는지 알려주는 설정정보이다. (1) 컴파일 시, 사용하는 정보 전달 (2) 코드를 자동으로 생성 시, 사용하는 정보 전달 (3) 특정 기능 처리 시, 사용하는 정보 전달 ➼ 🦔 어노테이션의 기본 속성 value 🤡 @SampleAnnotation(value = "값"); : 어노테이션에 써준 값은 자동으로 value 속성에 대입된다. public @interface SampleAnnotation { String value(); } 𖠃 어노테이션 적용대상 적용대상의 종류는 ElementType 열거 상수로 정의되어 있다. @Target(value = {ElementType.TYPE, ElementType.FIELD, Eleme..
𐂂 리플랙션 자바 클래스와 인터페이스의 메타정보를 Class객체로 관리한다. (메타정보: 패키지정보, 타입정보, 멤버정보[생성자, 필드, 메서드]) 메타정보를 프로그램에서 읽고 수정하는 행위를 '리플랙션'이라고 한다. Class clazz = [클래스이름].class; Class clazz = Class.forName("패키지... 클래스이름"); Class clazz = 객체참조변수.getClass(); clazz.getName() //ch12.sec11.exam01.Car clazz.getPackage().getName() //ch12.sec11.exam01 clazz.getSimpleName() //Car 𐁍 java.lang.reflect ⭐. 생성자, 필드, 메서드에 대한 선언부 경로를 제공한다..