JavaRush /Java Blog /Random-KO /Java์˜ this ํ‚ค์›Œ๋“œ์™€ super ํ‚ค์›Œ๋“œ์˜ ์ฐจ์ด์ 
grishin
๋ ˆ๋ฒจ 27
ะฅะฐั€ัŒะบะพะฒ

Java์˜ this ํ‚ค์›Œ๋“œ์™€ super ํ‚ค์›Œ๋“œ์˜ ์ฐจ์ด์ 

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
this๋ฐ superํด๋ž˜์Šค์™€ ํ•ด๋‹น ์Šˆํผํด๋ž˜์Šค์˜ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ๊ฐ ๋‚˜ํƒ€๋‚ด๋Š” Java์˜ ๋‘ ๊ฐ€์ง€ ํŠน์ˆ˜ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ข…์ข… ์ด๋Ÿฌํ•œ ๋‹จ์–ด๋ฅผ ํ˜ผ๋™ํ•˜๊ณ  Java Core ์ธํ„ฐ๋ทฐ์—์„œ ์ž์ฃผ ์งˆ๋ฌธ๋˜๋Š” ํŠน์ˆ˜ ์†์„ฑ์— ๋Œ€ํ•ด ๊ฑฐ์˜ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฆ‰์‹œ ๋– ์˜ค๋ฅด๋Š” ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์€ this๋ฐ , Java์—์„œ superํ‚ค์›Œ๋“œ์— ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ ? ํ‚ค์›Œ๋“œ ์™€ Java์˜ this์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ ? ๋ชจ๋ฅธ๋‹ค? ๊ธ€์Ž„, ์—ฌ๊ธฐ์„œ ๋‹ต์„ ์ œ์‹œํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ ๋ ๋ถ€๋ถ„์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ๋งํ–ˆ๋“ฏ์ด Java ์™€ Java์˜ ์ฃผ์š” ์ฐจ์ด์  ์€ ํด๋ž˜์Šค์˜ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ณ€์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค . ์†Œ์œ„ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์˜ˆ๋ฅผ ์ด๋ฏธ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒด์ธ์—์„œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ํ‚ค์›Œ๋“œ ๋ฐ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค . ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋Š” ์ธ์ˆ˜ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ , ์ธ์ˆ˜ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ˆ˜ ์—†์ด ์ƒ์„ฑ์ž๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ ์ ˆํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ณง ์ด ์‚ฌ์šฉ๋ฒ• ์˜ ์˜ˆ๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋˜ํ•œ Java ์—์„œ๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์™€ ํ•ด๋‹น ๋ถ€๋ชจ์˜ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ ‘๋‘์‚ฌ ๋ฐ ์—†์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜„์žฌ ๋ธ”๋ก์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์™€ ๊ฒน์น˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ˜•์‹์—์„œ๋Š” ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ „ํ˜•์ ์ธ ์˜ˆ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒ์„ฑ์ž ๋‚ด์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์˜ ๋’ท๋ถ€๋ถ„์—์„œ ์™€ ์‚ฌ์ด์— ๋‹ค๋ฅธ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ  ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. thissuperJava์˜ this ํ‚ค์›Œ๋“œ์™€ super ํ‚ค์›Œ๋“œ์˜ ์ฐจ์ด์  - 1thissuperthissuperthissuperthissuperthis()super()thissuperthissupersuperthisthissuperthis

this์™€ super์˜ ์œ ์‚ฌ์ 

thisํ‚ค์›Œ๋“œ ์™€ ์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์— super๋ช‡ ๊ฐ€์ง€ ์œ ์‚ฌ์ ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. this, ๋ฐ ๋ชจ๋‘ super๋น„์ •์  ๋ณ€์ˆ˜์ด๋ฏ€๋กœ ์ •์  ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. this์ด๋กœ ์ธํ•ด " ์ •์  ์ปจํ…์ŠคํŠธ์—์„œ ๋น„์ •์  ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค . ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ์—์„œ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•œ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค super.

  2. this, ๋ฐ ๋ชจ๋‘ super์ƒ์„ฑ์ž ๋‚ด๋ถ€์—์„œ ์ฒด์ธ์˜ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด this() ๋ฐ super()๋Š” ๊ฐ๊ฐ ์ƒ์† ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์ˆ˜ ์—†์ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” ๋จผ์ € ํด๋ž˜์Šค B์˜ ์ธ์ˆ˜ ์—†๋Š” ์ƒ์„ฑ์ž์—์„œ type ์˜ ๋‹จ์ผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ํด๋ž˜์Šค B์˜ ์ƒ์„ฑ์ž์— ํ˜ธ์ถœ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. String๊ทธ๋Ÿฌ๋ฉด ์ด ์ƒ์„ฑ์ž๋Š” ์ฐจ๋ก€๋กœ super("")์Šˆํผ ํด๋ž˜์Šค์—์„œ ๋‹จ์ผ ์ธ์ˆ˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
class A{

    A(){
        System.out.println("ะšะพะฝัั‚ั€ัƒะบั‚ะพั€ ะฑะตะท ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะปะฐััะฐ A");
    }

    A(String args){
        System.out.println("ะšะพะฝัั‚ั€ัƒะบั‚ะพั€ ั ะพะดะฝะธะผ ะฐั€ะณัƒะผะตะฝั‚ะพะผ ะบะปะฐััะฐ A");
    }
}

class B extends A{

   B(){
        this(""); // ะฒั‹ะทะพะฒ ะบะพะฝัั‚ั€ัƒะบั‚ะพั€ะฐ ั ะพะดะฝะธะผ ะฐั€ะณัƒะผะตะฝั‚ะพะผ ะบะปะฐััะฐ B
        System.out.println("ะšะพะฝัั‚ั€ัƒะบั‚ะพั€ ะฑะตะท ะฐั€ะณัƒะผะตะฝั‚ะพะฒ ะบะปะฐััะฐ B");
    }

   B(String args){
        super(""); // ะฒั‹ะทะพะฒ ะบะพะฝัั‚ั€ัƒะบั‚ะพั€ะฐ ั ะพะดะฝะธะผ ะฐั€ะณัƒะผะตะฝั‚ะพะผ ะบะปะฐััะฐ A
        System.out.println("ะšะพะฝัั‚ั€ัƒะบั‚ะพั€ ั ะพะดะฝะธะผ ะฐั€ะณัƒะผะตะฝั‚ะพะผ ะบะปะฐััะฐ B");
    }
}

// ะขะตัั‚-ะบะปะฐัั ะธ ะฒั‹ะฒะพะด
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
์ถœ๋ ฅ: ํด๋ž˜์Šค A์˜ ๋‹จ์ผ ์ธ์ˆ˜ ์ƒ์„ฑ์ž ํด๋ž˜์Šค B์˜ ๋‹จ์ผ ์ธ์ˆ˜ ์ƒ์„ฑ์ž ํด๋ž˜์Šค B์˜ ์ธ์ˆ˜ ์—†๋Š” ์ƒ์„ฑ์ž
  1. ์ƒ์„ฑ์ž ๋‚ด์—์„œ this๋ฐ ๋Š” super๋‹ค๋ฅธ ๋ชจ๋“  ํ‘œํ˜„์‹ ์œ„์— ๋งจ ์ฒ˜์Œ์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ์ƒ์„ฑ์ž์—๋Š” this(), ๋ฐ ๊ฐ€ ๋ชจ๋‘ ํฌํ•จ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค super().

์Šˆํผ์™€ ์ด๊ฒƒ์˜ ์ฐจ์ด์ 

์ด์ œ ์šฐ๋ฆฌ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• super๊ณผ thisํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์€ ์ด๋Ÿฌํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํด๋ž˜์Šค์—๋Š” ์ด๋Ÿฌํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Outer ํ‘œ๊ธฐ๋ฒ• ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. thisํ˜„์žฌ ์ธ์Šคํ„ด์Šค์™€ ์™ธ๋ถ€์— ๋Œ€ํ•ด. super- ๊ทธ์˜ ๋ถ€๋ชจ๋‹˜์„ ์œ„ํ•ด. Outer๋ฅผ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. this์ด์ œ ํ‚ค์›Œ๋“œ ์™€ ํ‚ค์›Œ๋“œ์˜ ์ฃผ์š” ์ฐจ์ด์ ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ๋‚˜์—ดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.super
  1. ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜ this๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์˜ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ˜๋ฉด super์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ฐ ์ƒ์„ฑ์ž๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ super()์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์ˆ˜๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ์•”์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€๋งŒ ํ•ญ์ƒ ๋˜๋Š” this()๋˜๋Š” ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค super().
this์ด๊ฒƒ์ด ์•„๋งˆ๋„ ํ‚ค์›Œ๋“œ ์™€ Java ์˜ ์ฐจ์ด์  super๋ฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋ถ€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋“ค์˜ ์ฃผ์š” ๋ชฉ์ ์€ ํ•˜๋‚˜์˜ ์ƒ์„ฑ์ž๋ฅผ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž์—์„œ ํ˜ธ์ถœํ•˜๊ณ  ํ˜„์žฌ ํด๋ž˜์Šค์™€ ํ•ด๋‹น ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ •ํ™•ํžˆ ์ผ๋ฐ˜์ ์ธ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด์ œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๋ฝ์—์„œ ๋ฌผ์—ˆ๋˜ ๋‚ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ๋ณ€์ˆ˜๋Š” thisfinal๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. IDE์—์„œ ์ด ์ž‘์—…์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋ณ€์ˆ˜์— ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ this๊ฐ€ ์ตœ์ข…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๊ธฐ์‚ฌ๋Š” ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค .
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION