CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ž๋ฐ” ์ด ํ‚ค์›Œ๋“œ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ž๋ฐ” ์ด ํ‚ค์›Œ๋“œ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
CodeGym์—์„œ ํ•™์ƒ๋“ค์€ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์—…์—์„œ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ Java this ํ‚ค์›Œ๋“œ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ทธ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ์ด์ผœ๋ณด๋ฉด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜ค๋žซ๋™์•ˆ ์ด ํ‚ค์›Œ๋“œ์˜ ์„ ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์Šค์Šค๋กœ ์ธ์ •ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๋Š” ์•„์ง ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•ด this ํ‚ค์›Œ๋“œ ์˜ ๋น„๋ฐ€์„ ๋‹ค๋ฃจ๋Š” ์žฅ๋ง‰์„ ๋’ค๋กœ ์ –ํž ๊ฒƒ์ž…๋‹ˆ๋‹ค ... Schildt์˜ Java ์ฐธ์กฐ๋ฅผ ์–ป์—ˆ๊ณ  171ํŽ˜์ด์ง€์—์„œ this ํ‚ค์›Œ๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์œผ๋กœ ์ˆ˜์—…์„ ๋๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ/์ƒ์„ฑ์ž ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ;
  2. ๋‹ค๋ฅธ ์œ ํ˜•์˜ ์ƒ์„ฑ์ž์—์„œ ํŠน์ • ์œ ํ˜•์˜ ์ƒ์„ฑ์ž(์˜ˆ: ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ๋˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž)๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ. ์ด๋ฅผ ๋ช…์‹œ์  ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ์ด ๋‘๋ ค์šด ํ‚ค์›Œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‘ ๊ฐ€์ง€๋ฟ์ž…๋‹ˆ๋‹ค. ์ด์ œ ์˜ˆ์ œ์—์„œ ์ด ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ 1: ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” Human ํด๋ž˜์Šค ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค . ์ด๋ฆ„ ๋ณ€์ˆ˜ ์— ๋Œ€ํ•œ setter๋ฅผ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค (setter๋Š” ์™„์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— catch๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค).

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
String newName์„ setName setter ๋ฉ”์„œ๋“œ ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๊ณ  setName ๋ฉ”์„œ๋“œ๋ฅผ ๋ฌถ๋Š” ์ค‘๊ด„ํ˜ธ({}) ๋‚ด์—์„œ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋Œ€๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. setter์—๋Š” ํ•œ ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

name = newName;
์—ฌ๊ธฐ์—์„œ๋Š” newName ์ด๋ผ๋Š” ์ƒˆ ๋ณ€์ˆ˜๋ฅผ ๋„์ž… ํ•˜๊ณ  ๊ฐœ์ฒด์˜ ๊ธฐ์กด ์ด๋ฆ„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ถ๊ทน์ ์œผ๋กœ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์„ ์ด์ƒํ•˜๊ฒŒ ์—ฌ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Human ํด๋ž˜์Šค์˜ ์ด๋ฆ„ ํ•„๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Java ์ œ์ž‘์ž๋Š” ๋™์ผํ•œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋™์ผํ•œ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‘ ๊ฐœ์˜ ์ด๋ฆ„์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ์— ๋ด‰์ฐฉํ•ฉ๋‹ˆ๋‹ค . ์ด์ œ ์ด๋ฆ„์ด ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฌธ์ž์—ด ์ด๋ฆ„์€ Human ํด๋ž˜์Šค ์— ์† ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฌธ์ž์—ด ์ด๋ฆ„์€ setName ๋ฉ”์„œ๋“œ ์— ์†ํ•ฉ๋‹ˆ๋‹ค . ๊ฒฐ๊ณผ์ ์œผ๋กœ JVM์€ setter์— ๋‹ค์Œ ์ค„์„ ์ž‘์„ฑํ•  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

name = name;
Java๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด๋ฆ„ ๋ณ€์ˆ˜, ์ฆ‰ setName ๋ฉ”์†Œ๋“œ์˜ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค . this ํ‚ค์›Œ๋“œ(์˜ˆ์‹œ ํฌํ•จ) - 3๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„ ๋ณ€์ˆ˜๋ฅผ ์ž์‹ ์—๊ฒŒ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ง์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ธ์–ด๋Š” Human ํด๋ž˜์Šค์˜ ์ด๋ฆ„ ๋ณ€์ˆ˜๋ฅผ setName ๋ฉ”์„œ๋“œ ์˜ ์ด๋ฆ„ ๋ณ€์ˆ˜ ์™€ ๊ตฌ๋ณ„ํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด ๋ฌธ์ œ ๋Š” this ํ‚ค์›Œ๋“œ ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ์˜ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ Human ํด๋ž˜์Šค ์˜ instancen๊ณผ ์—ฐ๊ฒฐ๋œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค .this ํ‚ค์›Œ๋“œ(์˜ˆ์‹œ ํฌํ•จ) - 4์ด ๋ฌธ์„œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ธ์ถœ ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ setName ๋ฉ”์†Œ๋“œ๋Š” ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค . ์ด ์ฝ”๋“œ๋Š” Human ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ์ด๋ฆ„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ thisthis ํ‚ค์›Œ๋“œ(์˜ˆ์‹œ ํฌํ•จ) - 5 ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค .

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        human1.print();
    }
}
class Human {
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print() {
        System.out.println(name);
    }
}
๋”ฐ๋ผ์„œ ๋™์ผํ•œ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ƒˆ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•ด์ง€๊ณ  ์ถ”๊ฐ€ ๋ณ€์ˆ˜๋กœ ๋œ ์–ด์ˆ˜์„ ํ•ด์ง‘๋‹ˆ๋‹ค .

์˜ˆ์ œ 2: ๋ช…์‹œ์  ์ƒ์„ฑ์ž ํ˜ธ์ถœ์— ์‚ฌ์šฉ

๋‹ค๋ฅธ ์ƒ์„ฑ์ž์—์„œ ํ•˜๋‚˜์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ (์ด์ƒํ•˜๊ฒŒ๋„ ์ถฉ๋ถ„ํžˆ) ์—ฌ๋Ÿฌ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๊ณ  ์ƒˆ ์ƒ์„ฑ์ž๊ฐ€ ์ด์ „์— ๋‹ค๋ฅธ ์ƒ์„ฑ์ž์—์„œ ์ž‘์„ฑ๋œ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ผ๋ž€์Šค๋Ÿฌ์šด? ๊ทธ๊ฒƒ์€ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ ‡๊ฒŒ ๋ฌด์„ญ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์„ธ์š”. ์—ฌ๊ธฐ์—๋Š” Human ํด๋ž˜์Šค ์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .

class Human {
    int age;
    int weight;
    int height;

    Human(int age, int weight) {
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋จผ์ € int age ์™€ int weight ๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค . ๋‘ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

this.age = age;
this.weight = weight;
๋‚˜์ค‘์— ์„ธ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ  ๊ธฐ์กด ์—ฐ๋ น ๋ฐ ์ฒด์ค‘ ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

this.age = age;
this.weight = weight;
this.height = height;
๊ทธ๋Ÿฌ๋‚˜ ์ด ์ƒ์„ฑ์ž์—์„œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋Œ€์‹  this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

this(age, weight);
// and then initialize the missing variable:
this.height = height;
๋งˆ์น˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ์ธ ์ƒ์„ฑ์ž์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ๋‹ค์•ผ =). ๋งˆ์ง€๋ง‰์œผ๋กœ Java์—์„œ this ํ‚ค์›Œ๋“œ๋Š” ๋ฉ”์„œ๋“œ์™€ ์ƒ์„ฑ์ž์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ชจ๋“  ๋น„์ •์  ๋ฉ”์„œ๋“œ์— ์•”์‹œ์ ์œผ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ(๊ทธ๋ž˜์„œ ์•”์‹œ ์  ๋งค๊ฐœ ๋ณ€์ˆ˜๋ผ๊ณ ๋„ ํ•จ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌด์„œ์šด ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€ ๋กœ ์ด ํ‚ค์›Œ๋“œ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค .
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION