๐Ÿ˜€
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • ์ง„ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ..
    • Code Review History
      • ํ•œ๋ฐฉ ์ฟผ๋ฆฌ vs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐ๋ฆฝ
      • DB์—์„œ TIMESTAMP์™€ DATETIME ํƒ€์ž…์˜ ์ฐจ์ด
      • Service๋Š” ์–ด๋–ค dto๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ• ๊นŒ?
        • ํ™•์žฅ ์งˆ๋ฌธ
  • Legacy
    • ์‹ค๋ฌด ๊ฒฝํ—˜ & ํŒ
      • Kotlin
        • ํŒŒ์ผ ์กฐ์ž‘ํ•˜๊ธฐ
      • Infra
        • Lightsail
          • ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ์˜ˆ์ œ
        • ๊ณต์ธ ip ํ™•์ธํ•˜๊ธฐ
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • ์ •์  ๋ฌธ์„œ ๋‚ด๋ณด๋‚ด๊ธฐ
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request ์ถ”์ ํ•˜๊ธฐ with HAR File
    • Study
      • Language
        • Java
          • Copy
          • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
          • Garbage Collection
          • ์ž๋ฃŒ๊ตฌ์กฐ
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql ์„ค์ •์˜ ๋‹จ์ 
          • @GeneratedValue strategy
          • Entity์˜ field type
        • Logback
          • ๊ธฐ๋ณธ ์„ค์ •
        • Monitoring
          • VisualVM
            • ์„ค์น˜
            • ๋ฌธ์ž์—ด ์ƒ์„ฑ์œผ๋กœ ํ…Œ์ŠคํŠธ
          • nGrinder
      • Database
        • MySQL
          • SQL ๋ฌธ ์ˆ˜ํ–‰ ์ ˆ์ฐจ
          • ํŠธ๋žœ์žญ์…˜๊ณผ ์ž ๊ธˆ
          • ์ธ๋ฑ์Šค
      • Infra
        • AWS
          • S3
            • ์šฉ์–ด
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP ๊ตฌ์„ฑ
            • HTTP ๊ทธ์™ธ
          • REST API
            • GET ๋ฉ”์„œ๋“œ์— payload๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€?
            • ํŠน์ • ๋ชฉ์ ์˜ API๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ?
          • TCP / UDP
          • ์ธํ„ฐ๋„ท์˜ ์ž‘๋™ ์›๋ฆฌ
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • ํ•œ ๋ฒˆ์— ๋๋‚ด๋Š” Spring ์™„.์ „.ํŒ ์ดˆ๊ฒฉ์ฐจ ํŒจํ‚ค์ง€ Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot ๋ฒ„์ „๋ณ„ ๋ณ€ํ™”
          • SpEL, Spring Expression Language
          • Validation
        • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ
          • 2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด
            • ์•„์ดํ…œ 1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
            • ์•„์ดํ…œ 2. ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
            • ์•„์ดํ…œ 3. private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
            • ์•„์ดํ…œ 4. ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
            • ์•„์ดํ…œ 5. ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
            • ์•„์ดํ…œ 7. ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ
          • 3์žฅ ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ
            • ์•„์ดํ…œ 11. equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ
            • ์•„์ดํ…œ 12. toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ
            • ์•„์ดํ…œ 14. Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ
          • 4์žฅ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
      • Webinar
        • ์š”์ฆ˜ ํž™ํ•œ ์Šคํƒ€ํŠธ์—…์˜ DBDB DEEPํ•œ ์ด์•ผ๊ธฐ
Powered by GitBook
On this page
  • Shallow Copy vs Deep Copy
  • Java ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Copy ๋ฉ”์†Œ๋“œ์˜ ๋น„๊ต

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Language
  4. Java

Copy

Shallow Copy vs Deep Copy

์–•์€ ๋ณต์‚ฌ Shallow Copy

  • ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ์ชฝ์˜ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉด ๋‹ค๋ฅธ ํ•œ ์ชฝ์—๋„ ์˜ํ–ฅ์ด ๊ฐ‘๋‹ˆ๋‹ค.

๊นŠ์€ ๋ณต์‚ฌ Deep Copy

  • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋กœ ๊ฐ„ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

Java ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Copy ๋ฉ”์†Œ๋“œ์˜ ๋น„๊ต

Method
Primitive Type Copy
Non-Primitive Type Copy
Speed

System.arraycopy()

Deep

Shallow

Fastest

Object.clone()

Deep

Shallow

Fast

Arrays.copyOf()

Deep

Shallow

Fast

Using for

Depend on code

Depend on code

Slow

  • Primitive Type ์€ ๊ฐ’ ๊ทธ ์ž์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— Deep Copy ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • Non-Primitive Type ์€ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜๋ฉฐ Swallow Copy ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

clone()

clone() ์€ shallow copy ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. deep copy ๋ฅผ ์œ„ํ•ด์„œ๋Š” Cloneable ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ํ•ด์ฃผ๊ฑฐ๋‚˜ new ๋ฅผ ํ†ตํ•ด deep copy ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ์ฝ”๋“œ

  • Cloneable ๋ฅผ implements ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค

    • clone : shallow copy

    • forCopy : deep copy

origin
clone
forCopy
import java.util.Arrays;

public class test {
  public static class Temp {
    public int a;
    public Object obj;

    public Temp(int a) {
      this.a = a;
      this.obj = new Object();
    }

    public int getA() {
      return a;
    }
  }

  public static void main(String[] args) {
    Temp[] origin = new Temp[]{new Temp(1), new Temp(2), new Temp(280), new Temp(1500), new Temp(40000)};
    Temp[] arrayCopy = new Temp[5];

    System.arraycopy(origin, 0, arrayCopy, 0, 5);

    Temp[] clone = origin.clone();
    Temp[] copyOf = Arrays.copyOf(origin, 5);
    Temp[] forCopy = new Temp[5];
    
    for (int i = 0; i < origin.length; i++) {
      forCopy[i] = new Temp(origin[i].getA());
    }
  }
}
PreviousJavaNext๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

Last updated 3 years ago

Was this helpful?

img
img