2025/06/25 7

지네릭스 제약네릭스 제약

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.제한된 지네릭 클래스요점:처럼 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

동기화 기법

혼자공부하는 컴퓨터구조 + 운영체제제책으로 공부한 내용을 정리한 글입니다. 동기화 없이 여러 프로세스가 동시에 자원에 접근하면 문제가 발생합니다.대표적인 예로는 공유 자원에 대한 충돌입니다. 예를 들어, 여러 프로세스가 하나의 임계 구역을 동시에 사용하려고 하면 문제의 원인이 됩니다.프로세스 A, B, C, D가 하나의 공유 자원에 동시에 접근하려 함충돌 가능성이 있으므로 이를 방지하기 위해 동기화 기법이 필요함 뮤텍스 락(Mutex lock)의미와 역할임계 구역: 동시에 하나의 프로세스만 들어가야 하는 공유 구역 (예: 탈의실)다른 사람이 들어가 있는 동안에는 다른 사람이 못 들어감 (동기화 필요)이럴 때 사용하는 것이 뮤텍스 락. 뮤텍스는 락(lock)을 걸어서 동시에 하나의 프로세스만 입장하게 함작..

OS 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

동기화

혼자공부하는 컴퓨터구조 + 운영체제제책으로 공부한 내용을 정리한 글입니다.동기화란운영체제가 프로세스를 관리하는 서비스 중 중요한 두 가지는 스케줄링과 동기화입니다.앞에서는 "스케줄링"에 대해 공부했는데, 이제는 "동기화"에 대해 알아봅니다.즉, 여러 프로세스가 동시에 실행될 때 서로 영향을 주지 않도록 순서나 자원 접근을 조절하는 것이 동기화입니다. 동기화의 의미현대의 컴퓨터 시스템은 여러 프로세스를 동시에 실행하는 구조입니다. 예를 들어:두 개 이상의 프로세스가 같은 데이터를 읽거나 쓸 수 있습니다.또는 한 프로세스가 수행하는 작업이 다른 프로세스에게 영향을 줄 수도 있습니다.이때 발생할 수 있는 문제를 방지하기 위해 프로세스 간의 실행을 조율하는 방법, 즉 "동기화"가 필요합니다.예를 들어:어떤 파일..

OS 2025.06.25

타입 변수

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.타입 변수란?핵심 요점:클래스나 메서드를 만들 때, 데이터 타입을 고정된 타입(Object 등) 으로 하지 않고, 변수처럼 일반화된 타입(E 등) 으로 지정하는 방식.이게 바로 지네릭 클래스입니다. public class ArrayList extends AbstractList { private transient Object[] elementData; public boolean add(Object o) { ... } public Object get(int index) { ... }}Object로 작성된 add()나 get() 메서드는 모든 타입을 받을 수는 있지만, 꺼낼 때 형변환(casting) 을 해야 합니다.예: String s ..

Java 2025.06.25

지네릭스

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.ClassCastException 예외 발생 예제ArrayList list = new ArrayList();list.add(10); // Integerlist.add(20); // Integerlist.add("30"); // StringInteger i = (Integer)list.get(2); // 형변환 시도❗ 핵심 포인트ArrayList를 제네릭 없이 생성하면 내부 타입은 Object로 처리됩니다.list.add(10)과 list.add(20)은 Integer 객체를 넣은 것이고,list.add("30")은 String 객체를 넣은 것입니다.그런데 list.get(2)으로 꺼낸 "30"을 Inte..

Java 2025.06.25