5/10 생활코딩 Java강의 (Clone, 제네릭 보충)
생활코딩 막바지에 제대로 강의를 듣지 못했던 것 같다.
그래서 Clone이랑 제네릭 부분만 다시 들었고 다른 내용은 나오면 추가로 정리할 예정이다.
1. Clone
clone은 객체를 복사해주는 메소드다. (a.clone(); < a 객체 복사)
다만 바로 쓸 수 있는 건 아니고 클래스가 인터페이스를 임포트 해줘야 한다.
(classname implements Cloneable)
하지만 implement한다고 바로 쓸 수 있는 건 아니다.
Colneable은 내용이 없는 빈 인터페이스이다.
다만 clone()은 protected라는 접근제어자를 가지고 있다.
따라서 구현하는 쪽에서 접근권한을 잘 처리해주어야 한다.
그리고 clone은 (runtime exception이 아닌) 일반 exception을 throw하기 때문에 반드시 예외처리도 해주어야 한다.
2. 제네릭
제네릭은 데이터타입을 유연하게 지정해줄 수 있는 기능이다.
같은 로직을 지녔지만 클래스들의 이름(데이터 타입)이 달라서 코드 중복이 생기는 문제는 제네릭으로 해소할 수 있다.
제네릭이 없었을 때엔 데이터타입이 안전하지 않았을 것이다.
즉, 지정하지 않은 타입의 데이터가 들어오거나 의도치 않은 데이터타입이 들어오는 현상을 데이터 타입이 안전하지 않다고 하는데 제네릭을 통해 데이터타입의 안정성을 보장해줄 수 있으며 코드양도 줄일 수 있어 추가되었다.
제네릭은 메소드의 매개변수처럼 여러 개의 데이터타입을 받을 수 있고 생략도 가능하다.
아래 두 코드는 동일하게 동작한다.
그러나 기본(원시)데이터타입은 제네릭의 데이터타입으로 지정하지 못하는 단점이 있다.
이를 위해 래퍼클래스라는 것이 존재한다.
래퍼클래스란 기본(원시)데이터타입을 객체로 포장하는 객체다.
int인 경우 래퍼클래스는 Integer. double은 래퍼클래스가 Double이다. (앞문자가 대문자다)
Integer i = new Integer(2);로 생성해주고 Integer가 품고 있는 본래 int값은
인스턴스.변수.intValue(); 코딩으로 다시 int타입으로 꺼내올 수 있다.
그래서 Clone이랑 제네릭 부분만 다시 들었고 다른 내용은 나오면 추가로 정리할 예정이다.
1. Clone
clone은 객체를 복사해주는 메소드다. (a.clone(); < a 객체 복사)
다만 바로 쓸 수 있는 건 아니고 클래스가 인터페이스를 임포트 해줘야 한다.
(classname implements Cloneable)
하지만 implement한다고 바로 쓸 수 있는 건 아니다.
Colneable은 내용이 없는 빈 인터페이스이다.
다만 clone()은 protected라는 접근제어자를 가지고 있다.
따라서 구현하는 쪽에서 접근권한을 잘 처리해주어야 한다.
그리고 clone은 (runtime exception이 아닌) 일반 exception을 throw하기 때문에 반드시 예외처리도 해주어야 한다.
2. 제네릭
제네릭은 데이터타입을 유연하게 지정해줄 수 있는 기능이다.
같은 로직을 지녔지만 클래스들의 이름(데이터 타입)이 달라서 코드 중복이 생기는 문제는 제네릭으로 해소할 수 있다.
제네릭이 없었을 때엔 데이터타입이 안전하지 않았을 것이다.
즉, 지정하지 않은 타입의 데이터가 들어오거나 의도치 않은 데이터타입이 들어오는 현상을 데이터 타입이 안전하지 않다고 하는데 제네릭을 통해 데이터타입의 안정성을 보장해줄 수 있으며 코드양도 줄일 수 있어 추가되었다.
제네릭은 메소드의 매개변수처럼 여러 개의 데이터타입을 받을 수 있고 생략도 가능하다.
아래 두 코드는 동일하게 동작한다.
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타입으로 꺼내올 수 있다.
댓글
댓글 쓰기