Java 107

쓰레드의 구현과 실행

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 쓰레드의 구현과 실행쓰레드를 만드는 두 가지 방법① Thread 클래스를 상속받기class MyThread extends Thread { public void run() { // 작업내용 }}Thread 클래스의 run() 메서드를 오버라이딩함start() 메서드를 호출하면 run()이 실행됨필기: extends = 상속 / 자바는 단일 상속만 가능MyThread t1 = new MyThread(); // 쓰레드 객체 생성t1.start(); // 쓰레드 실행 (run 내부 코드 실행) ② Runnable 인터페이스를 구현class MyThread2 implements Runnable { public void run()..

Java 2025.06.27

쓰레드

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.프로세스와 쓰레드프로세스(process)란?실행 중인 프로그램 하나를 의미합니다.메모리 공간, 자원(resources: 파일, 입출력 등), CPU 등과 함께최소 하나 이상의 쓰레드로 구성됨정리: 프로세스 = 자원 + 쓰레드쓰레드(thread)란?프로세스 안에서 실제 일을 수행하는 실행 단위프로세스 내부에서 작업을 수행하는 흐름하나의 프로세스에는 최소 1개 이상의 쓰레드가 존재함 (1개 이상 → “1+”라고 표시되어 있음)비유프로세스 = 공장쓰레드 = 일꾼 싱글 쓰레드 vs 멀티 쓰레드싱글 쓰레드 프로세스하나의 공장(프로세스)에 일꾼이 딱 한 명(쓰레드)구성: 자원 + 쓰레드멀티 쓰레드 프로세스하나의 공장 안에 여러 명의 일꾼이 동시에 일하는 구조같..

Java 2025.06.27

메타 애너테이션

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 메타 애너테이션메타 애너테이션은 다른 애너테이션을 정의할 때 사용하는 애너테이션입니다.즉, 애너테이션을 위한 애너테이션입니다.주요 메타 애너테이션 정리표@Target애너테이션을 적용할 수 있는 대상을 지정할 때 사용 (예: 클래스, 메서드, 변수 등)@Documented애너테이션을 javadoc 문서에 포함되도록 표시@Inherited애너테이션이 자식 클래스에 자동으로 상속되도록 허용@Retention애너테이션이 얼마나 오래 유지되는지 지정 (SOURCE, CLASS, RUNTIME)@Repeatable동일한 애너테이션을 여러 번 붙일 수 있도록 허용 (Java 8부터 가능)참고: 이 모든 메타 애너테이션은 java.lang.annotation 패..

Java 2025.06.26

표준 애너테이션

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.@Override의미: 메서드 오버라이딩(재정의)할 때 사용하는 어노테이션입니다.사용 이유: 상속받은 메서드를 재정의할 때, 오타나 잘못된 시그니처로 인한 오류를 컴파일러가 잡아줄 수 있도록 돕습니다.예시class Parent { void parentMethod() { }}class Child extends Parent { @Override void parentMethod() { } // 정확한 오버라이딩}@Override가 없으면 오타나 실수 시 아무런 경고 없이 잘못 동작할 수 있음@Override가 있으면 "부모에 그런 메서드 없어!" 라고 컴파일 에러 발생 @Deprecated의미: 더 이상 사용하지 말아야 할 요소(메서드,..

Java 2025.06.26

애너테이션

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 애너테이션이란?애너테이션(annotation)이란,Java에서 소스코드에 추가적인 정보를 붙이는 주석 같은 기능입니다.실제 프로그램 실행에 직접 영향을 주지 않고, 다른 프로그램(예: 컴파일러, 문서 생성기, 테스트 도구 등) 이 해당 정보를 읽어 활용할 수 있도록 도와주는 메타데이터(metadata)입니다.메타데이터 = 데이터에 대한 데이터,즉 프로그램의 일부가 아니라, 프로그램이나 도구가 참고할 수 있도록 코드를 꾸며주는 정보입니다.왜 필요한가?자바 개발자들은 "소스코드와 별도의 문서 파일을 따로 관리하는 것보다, 소스코드 안에 설명을 직접 적는 게 낫다"는 생각에서 애너테이션을 사용합니다.예를 들어 /** ... */ 주석은 javadoc 문..

Java 2025.06.26

열거형(enum)

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.열거형이란?여러 개의 상수를 정의할 때, 각각 static final로 정의하는 대신 한 번에 묶어서 선언할 수 있는 방식입니다.예: 카드의 무늬(CLOVER, HEART 등)와 숫자(TWO, THREE 등)처럼 고정된 값들의 집합을 만들 때 적합합니다.기존 방식 (불편하고 길다)enum 열거형이름 { 상수1, 상수class Card { static final int CLOVER = 0; static final int HEART = 1; static final int DIAMOND = 2; static final int SPADE = 3; static final int TWO = 0; static final int T..

Java 2025.06.26

와일드 카드, 지네릭 메서드

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 하나의 참조 변수로 여러 타입의 제네릭 객체를 참조 가능하게 하기 위한 문법핵심ArrayList list = new ArrayList(); // OKArrayList list = new ArrayList(); // 에러는 와일드 카드라 부르며, "알 수 없는 타입"이라는 의미입니다.는 Product와 그 자손 타입만 허용합니다.예: Product, Tv, Audio 등ArrayList 타입 참조 변수는 ArrayList를 받을 수 없습니다.제네릭은 타입까지 일치해야 하므로 불일치 에러 발생.세 가지 와일드카드 형태 → T와 그 자손만 허용 (상한 제한) → T와 그 조상만 허용 (하한 제한) → 제한 없음. 모든 타입 허용 (와 동일)와일드카드의 ..

Java 2025.06.26

지네릭스 제약네릭스 제약

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.제한된 지네릭 클래스요점:처럼 extends를 써서 타입 변수에 들어올 수 있는 타입을 제한할 수 있습니다.예제class FruitBox { ArrayList list = new ArrayList(); ...}FruitBox는 Fruit 또는 그 자손 클래스만 T로 받을 수 있습니다.예를 들어 FruitBox은 OK (Apple이 Fruit의 자손).FruitBox는 에러 → Toy는 Fruit을 상속받지 않았기 때문.interface Eatable { ... }class FruitBox { ... }인터페이스일 경우에도 extends를 사용합니다. (자바에서는 클래스나 인터페이스 모두 extends로 제한)implements는 실제 구현..

Java 2025.06.25

Iterator, HashMap과 지네릭스

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. Iterator기본 배경Iterator는 컬렉션(List, Set 등)을 순회할 수 있도록 해주는 인터페이스입니다.기존에는 Object next() 방식으로 모든 객체를 리턴했기 때문에, 실제 타입으로 형변환(casting)이 필요했습니다.제네릭을 사용하지 않음public interface Iterator { boolean hasNext(); Object next(); // Object로 반환하므로 void remove();}Iterator it = list.iterator();while (it.hasNext()) { Student s = (Student) it.next(); // 형변환 필요}list 안에는 Stude..

Java 2025.06.25

지네릭 다형성

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.타입 변수에 대입하기개념 정리: 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)지네릭(Generic) 은 클래스나 메서드를 선언할 때 사용할 데이터 타입을 나중에 결정하도록 하는 기능입니다.예를 들어 ArrayList는 타입 E를 사용하는 클래스인데, 객체를 만들 때 E를 Tv로 바꿀 수 있습니다. 코드ArrayList tvList = new ArrayList();ArrayList 라는 클래스에 E = Tv 라고 지정한 것.즉, 이 객체는 내부적으로 Tv 타입의 데이터만 저장하게 됩니다.public class ArrayList extends AbstractList { private transient E[] elementData; pu..

Java 2025.06.25