전체 글 324

MyArrayList

ArrayList 와 비슷하게 내부를 간단하게 한 코드package collection.array;import java.util.Arrays;public class MyArrayListV4 { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; public MyArrayListV4() { elementData = new Object[DEFAULT_CAPACITY]; // new 키워드 뒤에 제네릭으로 하려고 하면 컴파일 에러가 발생한다. 이유는 이레이저에 의해 타입 정보가 사라진다. // 따라서 런타임에 타입 정보가 필요한..

카테고리 없음 2025.06.16

배열

배열은 메모리상에 순서로 존재한다.int는 4byte를 차지한다. 따라서 배열의 시작 위치인 x100 부터 시작해서 자료의 크기(4byte)와 인덱스 번호를 곱하면 원하는 메모리 위치를 찾을 수 있다. 간단하게 공식으로는 배열의 시작 참조 + (자료의 크기 * 인덱스 위치) 이다.즉 arr[0] 을 찾을때 x100 + (4byte * 0) = x100 번 위치에 있는 데이터를 찾을 수 있고 arr[1] 을 찾을때 x100 + (4byte * 1) = x104 번 위치에 있는 데이터를 찾을 수 있고 있고 arr[2] 을 찾을때 x100 + (4byte * 2) = x108 번 위치에 있는 데이터를 찾을 수 있다.

자바기초 2025.06.16

타입 이레이저

제네릭은 자바 컴파일 단계에서만 사용되고 컴파일 이후에는 제네릭 정보가 삭제된다. 제네릭에 사용한 타입 매개변수가 모두 사라지는것이다. 컴파일 전인 .java에는 제네릭의 타입 매개변수가 존재하지만 컴파일 이후인 자바 바이트코드 .class에는 타입 매개변수가 존재하지 않는다. 런타임때 타입 이레이저에 의해서 타입 매개변수가 다 지워지고 전부 Object로 바뀐다. 즉 전에 연습코드에서 썻던 Cat, Dog 타입이 다 날아가고 Object로 변한다.

자바기초 2025.06.15

제네릭의 필요성(와일드 카드 편)

제네릭 메서드의 인자 값으로 사용할 제네릭 타입의 Box 클래스 생성package genericBox.test.ex5;public class Box { private T value; public void set(T value) { this.value = value; } public T get() { return value; }} 제네릭을 사용할 제네릭 메서드 생성package genericBox.test.ex5;import genericBox.animal.Animal;public class WildcardEx { // 제네릭 타입을 인자로 받아서 출력 static void printGenericV1(Box box) { Syste..

자바기초 2025.06.15

제네릭의 필요성(제네릭 클래스 편)

똑같은 객체인데 타입을 받는것만 다를때. 같은 기능의 객체중에 어떤 객체는 integer이고 다른 객체는 string이라면 object 타입으로 하면 될것같은데 코드를 짜보면 값을 꺼내거나 다른 변수에 넣을때 object를 string이나 integer로 다운캐스팅 해줘야한다 즉 반환타입이 안맞는 문제와 잘못된 인수를 전달가능성이 있다 package genericBox.ex1;public class GenericBox { private T value; public void set(T value) { this.value = value; } public T get() { return value; }} T 는 타입 매개변수GenericBox 에서 I..

자바기초 2025.06.15

중첩 클래스

public class Outer { // 정적 중첩 클래스 static 이 붙어 있음 static class StaticNested {} // 내부 클래스 static 이 붙어 있지 않음 특징: 바깥 클래스 (class Outer)의 인스턴스의 멤버에 접근 가능 class Inner {}} public class Outer { public void process() { // 지역 변수 int localVar = 10; // 지역 클래스 특징: 내부 클래스의 특징을 가지고 있고 지역 변수에도 접근 가능. 익명클래스는 지역 클래스와 특징이 같지만 클래스의 이름만 없음 class Local {} ..

자바기초 2025.06.15