서노썬
sun noes sun
서노썬
전체 방문자
오늘
어제
  • 카테고리 (142)
    • Java (89)
      • Day1 (20)
      • Day2 (16)
      • Day3 (4)
      • Day4 (5)
      • Day5 (2)
      • Day6 (2)
      • Day7 (4)
      • Day8 (6)
      • Day9 (3)
      • Day10 (0)
      • Day11 (0)
      • Day12 (0)
      • Day13 (3)
      • Day14 (0)
      • Day15 (0)
      • Day16 (0)
      • Day19 (0)
      • Day20 (0)
      • Day21 (2)
      • Day22 (4)
      • Day23 (2)
      • Day24 (5)
      • Day25 (4)
      • Day27 (2)
      • Day28 (3)
      • Day29 (1)
      • Day30 (1)
      • Day31 (0)
      • Day32 (0)
      • Dat33 (0)
      • Day34 (0)
      • Day35 (0)
      • Day36 (0)
    • HTML (37)
      • Day36 (20)
      • Day37 (3)
      • Day38 (2)
      • Day39 (8)
      • Day40 (3)
    • SQL (4)
      • Day40 (4)
      • Day41 (0)
      • Day42 (0)
      • Day43 (0)
      • Day44 (0)
      • Day45 (0)
    • JSP (0)
      • Day46 (0)
      • Day75 (0)
    • PYTHON (0)
      • Day75 (0)
      • Day76 (0)
    • Photo (12)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 글

태그

  • 자바
  • 자바continue
  • java메뉴입력
  • 자바연산자
  • Java
  • java자료형
  • java데이터타입
  • 논리연산자
  • 자바break
  • 자바자료형

티스토리

hELLO · Designed By 정상우.
서노썬

sun noes sun

Java/Day25

[Java] 인스턴스 복사 clone 메소드

2021. 12. 6. 23:41

인스턴스 복사(복제)

- clone 메소드

- Object 클래스에는 인스턴스의 복사를 위한 다음 메소드가 정의되어 있다.

protected Object clone() throws CloneNotSupportedException

그리고 이 메소드가 호출되면, 이 메소드가 호출된 인스턴스의 복사본이 생성되고, 이 복사본의 참조 값이 반환된다. 단 다음의 조건을 만족해야 이 메소드를 호출할 수 있다.

"Cloneable 인터페이스를 구현해야 합니다."

즉 Cloneable 인터페이스를 구현하고 있는 클래스의 인스턴스만이 clone 메소드의 호출이 가능하다. 만약에 Cloneable 인터페이스를 구현하지 않은 클래스의 인스턴스에서 clone 메소드를 호출하면 CloneNotSupportedException 예외가 발생한다.

 

그렇다면 Cloneable 인터페이스는 어떻게 정의되어 있을까? 구현해야 할 메소드는 무엇이 있을까?


결론부터 말하자면, Cloneable 인터페이스는 텅 빈 인터페이스이다. 즉, 구현해야 할 메소드가 하나도 존재하지 않는 인터페이스이다. Cloneable 인터페이스를 구현하는 이유는 다른 클래스와의 구별을 위한 특별한 표시의 목적으로 사용되었다.

즉 Cloneable 인터페이스의 구현은 다음의 의미를 담기 위함이다.

"이 클래스의 인스턴스는 복사(복제)를 해도 됩니다. 그러니 필요하다면 clone 메소드를 호출해서 인스턴스를 복사하세요."

인스턴스의 복사는 클래스에 따라서 매우 민감한(또는 허용해서는 안되는) 작업이 될 수도 있다. 따라서 인스턴스 복사의 허용여부는 클래스를 정의하는 과정에서 결정해야 한다. 그리고 인스턴스의 복사를 허용해도 된다는 결론이 나오면, Cloneable 인터페이스를 구현해서 클래스를 정의하면 된다.

 

 

'Java > Day25' 카테고리의 다른 글

[Java] Wrapper 클래스  (0) 2021.12.07
[Java] Clone 문제 (깊은 복사, 얕은 복사, 공변반환)  (0) 2021.12.07
[Java] isEquals  (0) 2021.12.06
    'Java/Day25' 카테고리의 다른 글
    • [Java] Wrapper 클래스
    • [Java] Clone 문제 (깊은 복사, 얕은 복사, 공변반환)
    • [Java] isEquals

    티스토리툴바