Clone ํ๋ค๋ ๊ฒ์ Object๋ฅผ ๋ง๋๋ ๊ฒ. Instance ๋ณ์์ ๊ฐ์ด ํ ๋น๋์ด ๋ง๋ค์ด์ง๋ ํ๋์ ์ค๋ธ์ ํธ
Exact๋ผ๋ ๊ฒ์ ์๋ ์ค๋ธ์ ํธ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ๊ฐ๋ค์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๋ ๋ณต์ ๋ฅผ ๋งํ๋ค,
Copy๋ผ๋ ๊ฒ์ ์ด์ชฝ Object๋ฅผ ๊ฐ์ง๊ณ ๋ณ๋์ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ฅผ ํ๋ ๋ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ค๋ธ์ ํธ๋ฅผ Copy ํ๋ ๊ฒ์ Clone ์ด๋ผ๊ณ ํ๋ค. ๋งจ ๊ผญ๋๊ธฐ ํด๋์ค๋ Object์ธ๋ฐ ์ด๊ฒ์ ์ด๋ฏธ ๊ตฌํ๋ Clone์ด ์กด์ฌํ๊ณ
์ฐ๋ฆฌ๋ ๋ฐ์์ ๊ตฌํ๋ ํด๋์ค๋ฅผ Override ํ๋ ๊ฐ๋
์ผ๋ก ์ฌ์ฉ์ ํ๊ฒ ๋๋ค. ๋ณดํต ํ๋์ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๊ฐ ์๋๋ฐ Equals, Clone ๋ฉ์๋๋ฑ์ Override ํ๋ ๊ฒ์ด ์ข๋ค.
ArrayList ์์๋ Clone ๋ฉ์๋๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ค. ArrayList์ aList๋ฅผ ๋ง๋ค์ด์ .clone์ ์ด์ฉํด duplocateList ์ค๋ธ์ ํธ๋ฅผ ํ๋ ์์ฑํ ์ ์๋ค. ๊ฐ์ง๊ณ ์๋ String ์์ฒด์ ๋ฐ์ดํฐ๊ฐ ์ค๋ณตํด์ ๋ง๋ค์ด์ง๋ ๊ฒ์ธ์ง ๊ทธ ํฌ์ธํฐ๋ฅผ ๊ด๋ฆฌํ๋ ArrayList๊ฐ ์ค๋ณตํด์ ๋ง๋ค์ด์ง๋ ๊ฒ์ธ์ง์ ์ด์๊ฐ ์กด์ฌํ๋ค.
PET์ด๋ผ๋ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ๋ณต์ฌํ๋ ๊ฒ์ ์ฐ์ตํ๋ ๊ณผ์
Clone ํ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ๋ฉด ์ฒ์ Define์ ํ ๋๋ถํฐ Clonable ์ธํฐํ์ด์ค๋ฅผ Implements ํด์ผ ํ๋ค. ์ด ์ธํฐํ์ด์ค ์์๋ ๊ตฌํ๋ ๋ฉ์๋๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ PET ์ด๋ผ๋ ํด๋์ค ์์์ clone์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ค์ผ ํ๋ค. Object๋ผ๋ ๋งจ ๊ผญ๋๊ธฐ ํด๋์ค์ clone ๋ฉ์๋๋ Return ํ์
์ด Object ์ด๋ฏ๋ก ์๋
ํด๋์ค์์ ๊ตฌํํ๋ clone ๋ฉ์๋๋ ๋ฆฌํด ํ์
์ด Object๊ฐ ๋์ด์ผ ํ๋ค.
catch ์์๋ return null์ ๊ผญ ํด์ฃผ๊ณ try์ ๊ฒฝ์ฐ super.clone()์ ๊ตฌํํ๋ฉด ๋๋ค.
PetDemo์์ ์ค๋ธ์ ํธ๋ฅผ ํ๋ ๋ง๋ค์ด์ writeOutput์ ํ๊ณ ์ถ๋ ฅ์ ํ๊ณ .clone์ ํตํด์ duplicateDate ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ ๋ค. ์ด๋ Type Casting์ ํด์ค์ผ ํ๋ค. ๋ฆฌํดํ์
์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๊ณ writeOutput์ ํตํด์ ์ ๋ณต์ ๊ฐ ๋์๋์ง ํ์ธ์ ํ๋ค.
Point Class
Clonable์ implement ํด์ clone ๋ฉ์๋๋ฅผ Override ํ๊ณ ์ด๋ return type์ Point๊ฐ ๋๋ค๋ฉด ํ์
Casting์ ํด์ฃผ์ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค. ํ์ง๋ง ์ ํํ๊ฒ Override ํ๋ ค๋ฉด Return ํ์
๊น์ง๋ ๋ง์ถฐ์ฃผ๋ ๊ฒ์ด ์ ๋๋ก๋ ์ฝ๋ฉ์ด ๋ ๊ฒ์ด๋ค.
๋ฉ์๋ ๋ด์์ ํ์
Casting์ ์งํํ๋ฉด clone ๋งค์๋๋ฅผ ์ฌ์ฉํ ๋ ํ์
Casting์
ํ์ง ์์๋ ๋์ง๋ง ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํด์ ์ถ์ฒํ์ง ์๋ ๋ฐฉ๋ฒ hashCode๊ฐ์ clone์ ํ ๊ฒฝ์ฐ ๋ค๋ฅด์ง๋ง ๊ฐ์ ๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
Shallow Copy Deep Copy
์ด๋์ชฝ Copy์ธ์ง ์ ์ํด์ ์งํํด์ผ ํ๋ค. C1์ ๊ทธ๋๋ก clone ํ๋ฉด C2 ๊ฐ ๋ง๋ค์ด์ง๋๋ฐ ์ขํ๊ฐ์ ๋๊ฐ์ ํฌ์ธํฐ๊ฐ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ ๊ฒ์ด๋ค. C1์์ ์ขํ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด C2์ ์ขํ๊ฐ๋ ์ ์ ๋ก ๋ณ๊ฒฝ์ด ๋๋ค. ์ขํ๊ฐ์ ๊ฐ๋ฅดํค๋ Object๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ธ ์ฝ๋ฉ ์์
์ด ํ์ํ๋ค.
C1์ด ๊ฐ๊ณ ์๋ Instance ๋ณ์ ์ค ํ๋๊ฐ Class ํ์
์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ Shallow์ Deep์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ฏผํด์ ์์ฑํด์ผ ํ๋ค.
Point Class
Cloneable์ implementํ๊ณ shallowCopy๋ผ๋ ๋งค์๋๊ฐ Clone์ ๋์ฒดํ๊ฒ ๋๋ค. Parent ํด๋์ค๋ฅผ cloneํด์ obj ๋ฅผ ํ๋ ์์ฑํ๋ค. ์ด ๊ฒฝ์ฐ Override๊ฐ ์๋๋ฏ๋ก ํ์ ํด๋์ค์์ super.clone์ ํ๋ฉด ์๋๋ค. ๋ก์ง์ cloneํ๊ณ ๋์ผํ๋ค.
DeepCopy
๋ค๋ฅธ ๊ฒ์ ๋์ผํ์ง๋ง DeepCopy์ ๊ฒฝ์ฐ ํฌ์ธํฐ๋ฅผ ๋ณ๋๋ก ํ๋ ๋ ๋ง๋ ๋ค. new Point๋ฅผ ๋ณ๋๋ก ํ๋ ๋ ๋ง๋ค์ด์ c์ ์ถ๊ฐํด์ฃผ๊ณ ๊ทธ C๋ฅผ ๋ฆฌํดํ๋ค.
shallowCopy๋ฅผ ํ C2์ deepCopy๋ฅผ ํ C3๋ฅผ ์์ฑํ๋ค. c1 c2 c3์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ ์ ์๋ ๋ชจ๋ ๋์ผํ๋ค. ๋ณ๊ฒฝ ํ c2๋ c1๋ง ๋ณ๊ฒฝ์ ํ์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ๋์ง๋ง C3์ ๊ฒฝ์ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
Arraylist๋ผ๋ ์ค๋ธ์ ํธ์์ ๊ตฌํ๋ clone์ ShallowCopy์ด๋ค.
'๐ Major Study (Bachelor) > ๐ JAVA Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swing, GUI, Event Driven Programming(JAVA 13.1) (0) | 2021.12.16 |
---|---|
JAVA ํ๋ก๊ทธ๋๋ฐ 17.2์ฅ Reserved Keyword (0) | 2021.12.12 |
JAVA ํ๋ก๊ทธ๋๋ฐ 16์ฅ Thread (0) | 2021.12.12 |
JAVA ํ๋ก๊ทธ๋๋ฐ 15.4์ฅ (0) | 2021.12.07 |
JAVA ํ๋ก๊ทธ๋๋ฐ 15.3์ฅ (0) | 2021.12.07 |