5/8 생활코딩 JAVA - 참조, 클론, 제네릭. 콜렉션

5/8

커리큘럼: 참조 ~ 끝

1. 기본 데이터형과 참조형 데이터형의 차이?

- 기본 데이터형은 소문자로 시작. 그리고 변수에다 값을 지정할 때 값의 데이터타입이 기본 데이터형이라면 변수가 차지하는 메모리 자체에 값이 저장 됨.
- 참조형 데이터형은 대문자로 시작. 변수에다 값을 지정할 때 값 자체가 변수에 저장되는 것이 아니라 그 데이터의 주소값이 저장 됨. (실제 값은 다른 메모리에 위치 함)

2. clone

clone은 객체를 복사해주는 메소드다. (a.clone(); < a 객체 복사)
다만 바로 쓸 수 있는 건 아니고 클래스가 인터페이스를 임포트 해줘야 한다.
(classname implements Cloneable)

하지만 implement한다고 바로 쓸 수 있는 건 아니다.
Colneable은 내용이 없는 빈 인터페이스이다.

다만 clone()은 protected라는 접근제어자를 가지고 있다.
따라서 구현하는 쪽에서 접근권한을 잘 처리해주어야 한다.
그리고 clone은 (runtime exception이 아닌) 일반 exception을 throw하기 때문에 반드시 예외처리도 해주어야 한다.

3. 제네릭

제네릭은 데이터타입을 유연하게 지정해줄 수 있는 기능이다.
같은 로직을 지녔지만 클래스들의 이름(데이터 타입)이 달라서 코드 중복이 생기는 문제는 제네릭으로 해소할 수 있다.

제네릭이 없었을 때엔 데이터타입이 안전하지 않았을 것이다.
즉, 지정하지 않은 타입의 데이터가 들어오거나 의도치 않은 데이터타입이 들어오는 현상을 데이터 타입이 안전하지 않다고 하는데 제네릭을 통해 데이터타입의 안정성을 보장해줄 수 있으며 코드양도 줄일 수 있어 추가되었다.

제네릭은 메소드의 매개변수처럼 여러 개의 데이터타입을 받을 수 있고 생략도 가능하다.
아래 두 코드는 동일하게 동작한다.
EmployeeInfo e = new EmployeeInfo(1);
Integer i = new Integer(10);
Person<EmployeeInfo, Integer> p1 = new Person<EmployeeInfo, Integer>(e, i);
Person p2 = new Person(e, i);

그러나 기본(원시)데이터타입은 제네릭의 데이터타입으로 지정하지 못하는 단점이 있다.
이를 위해 래퍼클래스라는 것이 존재한다.
래퍼클래스란 기본(원시)데이터타입을 객체로 포장하는 객체다.

int인 경우 래퍼클래스는 Integer. double은 래퍼클래스가 Double이다. (앞문자가 대문자다)
Integer i = new Integer(2);로 생성해주고 Integer가 품고 있는 본래 int값은
인스턴스.변수.intValue(); 코딩으로 다시 int타입으로 꺼내올 수 있다.


3. 제네릭 관련

1) 데이터 타입을 object로 하는 경우 초래될 수 있는 문제점은?
- 타입이 안전하지 않다. Type Safety가 없다고 한다.
이말인 즉슨, Java의 모든 데이터는 Object의 자손이다. 즉 어느 데이터나 갖다 붙여도 Object 데이터타입이라는 것인데 이것은 마치 특정인을 '사람'이라고 지칭하는 것과 같다.

2) 래퍼클래스란? 제네릭에서 래퍼클래스를 써야하는 이유?
- 래퍼클래스 : 기본(원시) 데이터타입을 객체로 감싸주는 클래스이다.


4. 콜렉션

1) ArrayList에서 add 메소드의 특징은? 제네릭으로 이를 해소하는 방안은?

- arraylist에 추가하는 데이터 타입은 사용자가 지정한 데이터타입으로 들어가지 않는다.
arraylist에 들어갈 때는 모든 데이터타입을 수용할 수 있도록 object 타입으로 들어간다.
따라서 데이터를 가져올 때는 add한 data type을 다시 불러들일 때 형변환 해야하는 수고로움을 거쳐야 한다는 단점이 있다. 그러므로, 제네릭을 써서 add/pull 할 때의 데이터 타입을 미리 지정해둘 수 있다.

2) set의 특징? set과 list의 차이?

- set은 dict의 key라고 생각하면 쉽다. 중복된 값은 허용하지 않는다.

3)iterator는 어떤 방식으로 동작하는가

- iterator는 반복시켜주는 놈. 배열의 맨 앞에서 주로 등장하고 각 종 자료구조형에 모두 iterator가 있다.

4) 컬렉션 프레임워크를 쓸 때 데이터타입을 컬렉션으로 하는 것이 좋은 이유?

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용