[Java] 클래슀 (2)

2025. 1. 4. 19:39Β·πŸ‘¨‍πŸ’» Programming/Java

μƒμ„±μž 닀쀑 μ •μ˜

  • μƒμ„±μžλ„ 닀쀑 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μƒμ„±μžκ°€ 닀쀑 μ •μ˜λ˜μ—ˆλ‹€κ³  할지라도, ν˜ΈμΆœλ˜λŠ” μƒμ„±μžλŠ” 1κ°œμž…λ‹ˆλ‹€.
class MyString {
    private byte[] string;

    public MyString() {}
    public MyString(String param) {
        this.string = param.getBytes();
    }

    public MyString(int param) {
        String tmp;
        tmp = String.format("%d", param);
        this.string = tmp.getBytes();
    }

    public String getString() {
        if (string == null || string.length == 0) return "(null)";
        return new String(string);
    }
}

public class Main {
    public static void main(String[] args) {
        MyString str1 = new MyString("Hello");
        MyString str2 = new MyString("123");
        System.out.println(str1.getString());
        System.out.println(str2.getString());
    }
}

얕은 볡사

μΈμŠ€ν„΄μŠ€κ°€ λŠ˜μ–΄λ‚˜λŠ” 것이 μ•„λ‹ˆλΌ λ‹¨μˆœνžˆ 참쑰자만 λŠ˜μ–΄λ‚˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. 였λ₯˜κ°€ 일어날 κ°€λŠ₯성이 ν½λ‹ˆλ‹€.

κΉŠμ€ 볡사

원본 μžμ²΄λ„ μƒˆλ‘œ ν• λ‹Ήν•˜κ³ , λ³΅μ‚¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό λŠ˜λ¦¬λŠ” κ²ƒμž…λ‹ˆλ‹€.
clone()을 μ‚¬μš©ν•˜μ—¬ λ³΅μ‚¬λœ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 방법이 μžˆμœΌλ‚˜, κ·œμ•½μ΄ λͺ¨ν˜Έν•˜κ³ , μ˜ˆμ™Έμ²˜λ¦¬κ°€ λ³΅μž‘ν•˜λ‹€λΌλŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€.
볡사 μƒμ„±μžλ₯Ό μ΄μš©ν•˜λ©΄ 이 단점을 없앨 수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έμ‘°μžμ™€ μΈμŠ€ν„΄μŠ€λ₯Ό κ΅¬λ³„ν•˜λŠ”κ²Œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€!

예제

class MyString {
    private byte[] string;
    MyString() {
        string = null;
    }

    public MyString(String param) {
        string = param.getBytes();
    }

    public MyString(MyString rhs) {
        this.deepCopy(rhs);
    }

    public void deepCopy(MyString rhs) {
        this.string = rhs.string.clone();
    }

    public String getString() {
        if(string == null || string.length <= 0) {
            return "(null)";
        }

        return new String(string);
    }

    public void setString(String param) {
        string = param.getBytes().clone();
    }
}

public class Main {
    public static void main(String[] args) {
        MyString src = new MyString("Hello");
        MyString dst = new MyString(src);

        src.setString("World");
        System.out.println(dst.getString());
    }
}

정적 멀버 (static)

  • μΈμŠ€ν„΄μŠ€κ°€ 없어도 호좜이 κ°€λŠ₯ν•œ 멀버(ν•„λ“œ, λ©”μ„œλ“œ)μž…λ‹ˆλ‹€.
  • thisλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 것이고, static은 μΈμŠ€ν„΄μŠ€ λ©”λͺ¨λ¦¬λ₯Ό 같이 μ“°μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, this둜 정적 멀버에 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • finalκ³Ό ν•¨κ»˜ μ„ μ–Έν•¨μœΌλ‘œμ¨ 심볼릭 μƒμˆ˜λ‘œ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

정적 λ©”μ„œλ“œλ‘œ MyString 클래슀 μž‘μ„±ν•˜κΈ°

class MyString {
    private byte[] string;
    private static int count;

    private MyString() {
        string = null;
    }

    private MyString(int param) {
        this.string = String.format("%d", param).getBytes();
    }

    private MyString(String param) {
        this.string = param.getBytes();
    }

    public String getString() {
        if(string == null || string.length <= 0) {
            return "(null)";
        }

        return new String(string);
    }

    public static MyString newString(int param) {
        count++;
        return new MyString(param);
    }

    public static MyString newString(String param) {
        count++;

        if(param == null || param.length() == 0) {
            return new MyString("(null)");
        }

        return new MyString(param);
    }

    public static int getCount() {
        return MyString.count;
    }
}

public class Main {
    public static void main(String[] args) {
        // MyString src = new MyString("Hello");
        MyString s1 = MyString.newString(10);
        MyString s2 = MyString.newString("Test");

        System.out.println(s1.getString());
        System.out.println(s2.getString());
        System.out.println(MyString.getCount());
    }
}

좜처

  • 기초 탄탄! λ…ν•˜κ²Œ μ‹œμž‘ν•˜λŠ” Java - Part 2 : OOP와 JVM

'πŸ‘¨β€πŸ’» Programming > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] 클래슀 (1)  (0) 2024.12.31
[Java] String 객체가 λΉ„μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 방법  (0) 2024.10.27
'πŸ‘¨‍πŸ’» Programming/Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Java] 클래슀 (1)
  • [Java] String 객체가 λΉ„μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” 방법
jinnkimm7
jinnkimm7
[Nothing changes if nothing changes] 개발 κ΄€λ ¨ κΈ€ μœ„μ£Όλ‘œ ν¬μŠ€νŒ… ν•  μ˜ˆμ •μ΄λ©°, κ·Έ 밖에 자기개발/일상/여행에 κ΄€ν•œ 정보도 ν¬μŠ€νŒ… ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.
  • jinnkimm7
    Jin's log
    jinnkimm7
  • 전체
    였늘
    μ–΄μ œ
  • βœοΈκΈ€μ“°κΈ° πŸ¦Ίκ΄€λ¦¬
    • λΆ„λ₯˜ 전체보기 (86)
      • πŸ“š Record (0)
      • πŸ‘¨‍πŸ’» Programming (10)
        • JavaScript (3)
        • React (1)
        • Next.js (2)
        • HTML (0)
        • CSS (1)
        • Java (3)
        • Spring (0)
      • πŸ’» CS (13)
        • Computer Architecture (1)
        • Operation System (2)
        • Data Structure (0)
        • Algorithm (2)
        • Database (7)
        • Network (1)
      • βš™οΈ Tool (12)
        • AWS (2)
        • git (3)
        • VS Code (2)
        • IntelliJ (0)
        • Eclipse (1)
        • Excel (4)
      • πŸ“ Coding Test (37)
        • Programmers Lv0 (6)
        • Programmers Lv1 (1)
        • Programmers Lv2 (2)
        • Programmers Lv3 (1)
        • λ°±μ€€ Bronze (0)
        • λ°±μ€€ Sliver (3)
        • SQL (24)
      • πŸ“– Study (9)
      • πŸ”  English (0)
      • πŸŽ’ Travel (0)
      • πŸ’° Finance (0)
      • πŸ“Œ Etc (3)
  • 링크

    • Resume
  • 인기 κΈ€

  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • νƒœκ·Έ

    ν•­ν•΄99
    μ½”λ”©ν…ŒμŠ€νŠΈμ—°μŠ΅
    ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
    SQL
    였라클
    java
    dynamodb
    μ½”λ”©ν…ŒμŠ€νŠΈ
    git
    λ°±μ€€
    vscode
    99클럽
    next.js
    AWS
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    μ˜€λΈ”μ™„
    λ°˜λ„μ²΄8λŒ€κ³΅μ •
    μ½”λ”©ν…ŒμŠ€νŠΈμ€€λΉ„
    MYSQL
    클래슀
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
jinnkimm7
[Java] 클래슀 (2)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”