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. 제네릭
제네릭은 데이터타입을 유연하게 지정해줄 수 있는 기능이다.
같은 로직을 지녔지만 클래스들의 이름(데이터 타입)이 달라서 코드 중복이 생기는 문제는 제네릭으로 해소할 수 있다.
제네릭이 없었을 때엔 데이터타입이 안전하지 않았을 것이다.
즉, 지정하지 않은 타입의 데이터가 들어오거나 의도치 않은 데이터타입이 들어오는 현상을 데이터 타입이 안전하지 않다고 하는데 제네릭을 통해 데이터타입의 안정성을 보장해줄 수 있으며 코드양도 줄일 수 있어 추가되었다.
제네릭은 메소드의 매개변수처럼 여러 개의 데이터타입을 받을 수 있고 생략도 가능하다.
아래 두 코드는 동일하게 동작한다.
그러나 기본(원시)데이터타입은 제네릭의 데이터타입으로 지정하지 못하는 단점이 있다.
이를 위해 래퍼클래스라는 것이 존재한다.
래퍼클래스란 기본(원시)데이터타입을 객체로 포장하는 객체다.
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) 컬렉션 프레임워크를 쓸 때 데이터타입을 컬렉션으로 하는 것이 좋은 이유?
커리큘럼: 참조 ~ 끝
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) 컬렉션 프레임워크를 쓸 때 데이터타입을 컬렉션으로 하는 것이 좋은 이유?
댓글
댓글 쓰기