5/10 생활코딩 Java강의 (Clone, 제네릭 보충)

생활코딩 막바지에 제대로 강의를 듣지 못했던 것 같다.
그래서 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타입으로 꺼내올 수 있다.





댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

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

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