You are using an outdated browser. Please upgrade your browser to improve your experience.

ArrayList

여기서 copyOf의 1번은 기존 복사할 배열의 데이터, 2번은 새로만든 빈배열 . 메서드를 통해 복사된 값이 최종적으로 elementData로 들어간다.

형식 : arrayCopy(Object src, int srcPos, object dest, int destPos, length)

파라미터
src - 복사대상
srcPos - 복사할 항목의 시작 인덱스
dest - 목적지
destPos - 복사 목적지 인덱스
length - 복사할 항목의 개수
    System.arraycopy(
        elementData, 
        index+1, // 삭제할 인덱스 +1부터 복사를 시작한다.
        elementData, 
        index, // 삭제할 인덱스 부터 배열을 붙여넣기한다.
        this.size-(index+1)); // 기존배열 사이즈 - (삭제할 인덱스+1)
}

newInstance() - 동적객체 생성

도저히 뭔소린지 모르겠으니 Class class를 배우고 다시 복습해보자

제네릭 배열

E[] arr 는 되는데 왜 new E[]는 안돼는가?

그 이유는 new 연산자 때문이다. new 연산자는 heap 영역에 충분한 공간이 있는지 확인한 후 메모리를 확보하는 역할을 한다. 충분한 공간이 있는지 확인하려면 타입을 알아야한다. 그런데 컴파일 시점에 타입 T 가 무엇인지 알 수 없기 때문에 new T[5] 와 같이 제네릭으로 배열을 생성할 수는 없다.

static 변수에도 제네릭을 사용할 수 없다. static 변수는 인스턴스에 종속되지 않는 클래스변수로써 모든 인스턴스가 공통된 저장공간을 공유하게 되는 변수이다.

하지만 static 메서드에는 제네릭을 사용할 수 있다고?

스태틱 메서드의 선언부에 제네릭을 사용하면 ok, 그러나 파라미터안에 들어간 제네릭은 허용되지 않는 문법

자바프로젝트 15부터 진행중~ 진행완료

// 추상 메서드를 선언하는 의미?

// - 서브 클래스에 구현을 강제하는 문법.

//

// 메서드 구현을 강제한다는 의미?

// - 해당 객체가 반드시 갖춰야 할 기능을 선언하는 것.

// - 즉 객체의 사용법(사용규칙)을 명시하는 효과.

//

// 객체의 구현 방법에 영향을 받지 않는 메서드를 따로 분리하여

// 별도의 사용 규칙으로 정의하게 되면,

// 좀 더 유연하고 교체하기 쉬운 구조로 코드를 관리할 수 있다.

//

// 초보자를 위한 실무 공식:

// - 추상 클래스를 정의한 다음 추상 메서드를 설정한다.

// - 추상 메서드는 인터페이스 문법을 사용하여 별도로 분리한다.

// - 클래스에서 사용 규칙(메서드 호출 규칙)을 따로 분리해서 정의해 두면

// 좀 더 다양한 하위 클래스를 정의하고 다룰 수 있다.

// - 추상 메서드가 대부분인 경우 인터페이스로 정의하는 것이 낫다.

// 왜?

// 추상 클래스의 목적이 하위 클래스에게 공통 필드나 메서드를 상속해 주는 것인데,

// 대부분의 메서드가 추상 메서드라서 서브 클래스 입장에서 딱히 도움이 안되는 상황일 때

// 그냥 메서드 사용 규칙만 정의하는 것이 코드 관리에 낫기 때문이다.

어려웠던 부분 - CRUD 코드 추가하는거.. 알고리즘은 너무 어렵다

내일은 새로운 문법인 중첩클래스를 배울예정. 그리고 알고리즘 하루에 1문제씩 풀기..