| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- GitHub_Actions
- spring
- Java
- 카카오인가코드받기
- Spring API
- tag
- 인스턴스
- html
- button
- input
- Docker
- 어떤 개발자?
- ci/cd
- form
- 엔티티 매니저
- 백엔드스쿨
- 상속
- jenkins
- MIND 2023 #후기
- 엔티티 생명주기
- static
- Interface
- 제로베이스
- 예외
- feignClient
- 카카오인증토큰받기
- 카카오사용자정보가져오기
- 백엔드공부
- oAuth2
- 백엔드 로드맵
Archives
- Today
- Total
HiDevelop
[Java] Object 클래스의 Clone 메소드 본문
728x90
- Clone 메소드
protected object clone() throws CloneNotSuppertedException
해당 메소드는 Object의 클래스에 정의되어 있는 메소드로, 호출된 인스턴스의 복사본이 생성되고, 복사본의 참조 값(주소값)을 반환한다. 다음의 코드를 보자
class Cat implements Cloneable{
String name;
int age;
public Cat(String name, int age) {
this.age = age;
this.name = name;
}
public void show() {
System.out.printf("[%s, %d]",name, age);
System.out.println("");
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Test {
public static void main(String[] args) {
Cat catA = new Cat("쵸비", 9);
Cat catB;
try {
catB = (Cat)catA.clone();
catA.show();
catB.show();
}
catch(Exception e){
e.printStackTrace();
}
}
}
다음 코드는 CatA 인스턴스를 CatB 복사하는 코드이다. 특별한 점은 찾았는가?
첫번째는
class Cat implements Cloneable{...}
Cloneable 인터페이스를 구현한다는 것이다. 그럼 Cloneable은 무슨 인터페이스이길래 clone메소드를 사용할 클래스에 구현해줘야 하는가?
public interface Cloneable {}
텅 빈 인터페이스이다. 인터페이스는 오버라이딩을 하기위해 사용하기도 하지만 하나의 구분자역할을 하기도 한다. 즉 이 클래스는 복제가 가능합니다 라는 구분을 해주고 있는 것이다.
두번째는
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
Object 클래스의 clone 메소드를 오버라이딩 한 거이다. 그 이유는 Object 클래스 정의 clone은 protected로 접근제어자가 선언되어있기 때문에 상속을 받은 클래스와 동일 패키지내에서만 사용이 가능하다. 그렇기에 접근 제어자를 public으로 선언하여 오버라이딩한 것 이다
728x90
'Java' 카테고리의 다른 글
| [Java] Thread (0) | 2022.03.10 |
|---|---|
| [Java]Generics (0) | 2022.03.01 |
| [Java] JVM의 메모리 관리 (0) | 2022.02.17 |
| [Java] 다시 정리하는 예외 (0) | 2022.02.11 |
| [Java] Local Class & Anonymous 클래스 (0) | 2022.02.07 |