GiantStepDEV
article thumbnail

์ƒ์†์€ ์ƒ์†์ด ์•„๋‹ˆ๋‹ค.

ํ”ํžˆ ์ƒ์†์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ถ€๋ชจ์˜ ์œ ์‚ฐ์„ ์ƒ์†๋ฐ›๋Š”๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์‚ฌ์ „์  ์˜๋ฏธ๋งŒ ๋ณด์•„๋„ ๊ฐ€์กฑ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์–ด์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ช…์‚ฌ
  • 2.
    ๋ฒ•๋ฅ  ์ผ์ •ํ•œ ์นœ์กฑ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ ์‚ฌ์ด์—์„œ, ํ•œ ์‚ฌ๋žŒ์ด ์‚ฌ๋งํ•œ ํ›„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์žฌ์‚ฐ์— ๊ด€ํ•œ ๊ถŒ๋ฆฌ์™€ ์˜๋ฌด์˜ ์ผ์ฒด๋ฅผ ์ด์–ด ์ฃผ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ๋งํ•œ ์‚ฌ๋žŒ์œผ๋กœ๋ถ€ํ„ฐ ๊ทธ ๊ถŒ๋ฆฌ์™€ ์˜๋ฌด์˜ ์ผ์ฒด๋ฅผ ์ด์–ด๋ฐ›๋Š” ์ผ.

ํ ... ๋Œ€์ฒด ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์ƒ์†์ด ๋ฌด์Šจ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ์š”?

 

๋งž์Šต๋‹ˆ๋‹ค. ์—ฐ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค.

์•ž์— ๊ฐ์ฒด์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์„ฑ์ด ์บก์Аํ™”, ์ƒ์†, ์ถ”์ƒํ™”, ๋‹คํ˜•์„ฑ ์ด๋ผ๊ณ  ํ•ด๋†“๊ณ  ๋ฌด์Šจ ์†Œ๋ฆฌ๋ƒ๊ตฌ์š”?

 

์ž ์‹œ๋งŒ์š”. ๋ง์”€ ๋๊นŒ์ง€ ๋“ค์–ด๋ณด์„ธ์š”..!

 

์ด๋Š” ์˜์–ด๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋‹ค ์ƒ๊ธด ์˜คํ•ด ์•„๋‹Œ ์˜คํ•ด๋ผ๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ์ƒ์†์€ ๊ณ„์ธต๋„(์กฐ์ง๋„)๊ฐ€ ์•„๋‹Œ ๋ถ„๋ฅ˜๋„๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜ : ์˜ˆ์Šคํผ <๊ฐ€์กฑ ๊ณ„์ธต๋„>
์ถœ์ฒ˜ : https://m.blog.naver.com/bluesomedays/120200503482 <๋™๋ฌผ ๋ถ„๋ฅ˜๋„>

 

๋ถ„๋ฅ˜๋„๋Š” ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๋งํ•ด ๋ฌด์ฒ™์ถ” ๋™๋ฌผ์€ ๋™๋ฌผ์˜ ์ž์‹์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ฒ™์ถ”๋™๋ฌผ๋„ ์กฐ๋ฅ˜์˜ ๋ถ€๋ชจ์ผ ์ˆ˜๋Š” ์—†์ง€์š”.

 

๋™๋ฌผ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์„ธ๋ถ„ํ™”ํ•ด์„œ ๋ฌด์ฒ™์ถ”๋™๋ฌผ๊ณผ ์ฒ™์ถ”๋™๋ฌผ๋กœ ๋‚˜๋‰˜๊ณ , 

์ฒ™์ถ”๋™๋ฌผ์„ ์„ธ๋ถ„ํ™”ํ•ด์„œ ์–ด๋ฅ˜, ์–‘์„œ๋ฅ˜, ํŒŒ์ถฉ๋ฅ˜, ์กฐ๋ฅ˜, ํฌ์œ ๋ฅ˜๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ์˜ ์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ƒ์†ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋”ํ•ด ํ•„์š”ํ•œ ํŠน์„ฑ์„ ํ™•์žฅ(extends)ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ, ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค๋กœ ์“ฐ๊ธฐ ๋ณด๋‹ค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค - ํ•˜์œ„ํด๋ž˜์Šค ํ˜น์€ ์Šˆํผ ํด๋ž˜์Šค - ์„œ๋ธŒ ํด๋ž˜์Šค๋ผ๊ณ   ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค.

๐Ÿถ ์—ฌ๋‹ด์ด์ง€๋งŒ, ์ €๋„ ๋ถ€๋ชจ์™€ ์ž์‹ ํด๋ž˜์Šค๋กœ ๋ฐฐ์šดํ„ฐ๋ผ ์ƒ์†์˜ ์˜๋ฏธ๋ฅผ ์กฐ๊ธˆ ์˜คํ•ดํ–ˆ์—ˆ์Œ์„ ์‹œ์ธํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋ฌดํŠผ ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๊ฐˆ์ˆ˜๋ก ์ถ”์ƒํ™”/์ผ๋ฐ˜ํ™” ๋˜๊ณ ,

ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๊ฐˆ์ˆ˜๋ก ๊ตฌ์ฒดํ™”/ํŠน์ˆ˜ํ™” ๋๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ƒ์† ๊ด€๊ณ„๋Š” โญํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. ๋ผ๋Š” ๋ฌธ์žฅ์„ ๋ฐ˜๋“œ์‹œ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์•„์ง ๋‚ฉ๋“์ด ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ฒ„์ง€ ์˜ํฌ = new ๋”ธ();
// ๋”ธ์ด ํƒœ์–ด๋‚ฌ์œผ๋‹ˆ ์•„๋ฒ„์ง€ ์—ญํ• ์„ ํ•˜๋Š” ์˜ํฌ๋ผ ์ด๋ฆ„ ์ง€์—ˆ๋‹ค(?)

์–ธ๋œป ๋ด๋„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋งž์ง€ ์•Š๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๋ฌผ ๋ฏธํ‚ค๋งˆ์šฐ์Šค = new ์ฅ();
// ์ฅ๊ฐ€ ํ•œ๋งˆ๋ฆฌ ํƒœ์–ด๋‚ฌ์œผ๋‹ˆ ๋™๋ฌผ ์—ญํ• ์„ ํ•˜๋Š” ๋ฏธํ‚ค๋งˆ์šฐ์Šค๋ผ ์ด๋ฆ„ ์ง€์—ˆ๋‹ค.

๋ง์ด ์–ด์ƒ‰ํ•˜๊ธด ํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ดค์„ ๋•Œ ํฌ๊ฒŒ ์–ด์ƒ‰ํ•จ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰ ๊ฒฐ์ •์ ์œผ๋กœ! ์ž๋ฐ”์—์„œ ์ƒ์†์„ ํ•  ๋•Œ๋Š” inheritance๊ฐ€ ์•„๋‹Œ extends๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ๋งŒํผ ์ž๋ฐ” ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์ž˜ ์ดํ•ดํ•œ ์‚ฌ๋žŒ์€ ์—†๊ฒ ์ฃ . ๐Ÿ˜

์ƒ์†์˜ ๊ฐ•๋ ฅํ•จ

์ด์ œ โญํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. ๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ์ƒ์†์˜ ๊ฐ•๋ ฅํ•จ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

public class Animal {
    String name;
    
    Animal() {
    	name = "๋™๋ฌผ";
    }
    
    void show() {
    	System.out.println(name);
    }
}
public class ํฌ์œ ๋ฅ˜ extends Animal {
    ํฌ์œ ๋ฅ˜() {
    	name = "ํฌ์œ ๋ฅ˜";
    }
}
public class ์กฐ๋ฅ˜ extends Animal {
    ์กฐ๋ฅ˜() {
    	name = "์กฐ๋ฅ˜";
    }
}
public class Dog extends ํฌ์œ ๋ฅ˜ {
    Dog() {
    	name = "๊ฐ•์•„์ง€";
    }
}
public class ์ฐธ์ƒˆ extends ์กฐ๋ฅ˜ {
    ์ฐธ์ƒˆ() {
    	name = "์ฐธ์ƒˆ";
    }
}
public class Main {
	public static void main(String[] args) {
    	Animal animal = new Animal();
        Animal ํฌ์œ ๋ฅ˜ = new ํฌ์œ ๋ฅ˜();
        Animal ์žฌ๋กฑ์ด = new Dog();
        
        animal.show();
        ํฌ์œ ๋ฅ˜.show();
        ์žฌ๋กฑ์ด.show();
    }
}
๋™๋ฌผ
ํฌ์œ ๋ฅ˜
๊ฐ•์•„์ง€

์œ„ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด "ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋‹ค." ๊ฒƒ์ด ํ™• ์™€๋‹ฟ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

ํฌ์œ ๋ฅ˜ ํ•œ๋งˆ๋ฆฌ๋ฅผ ๋™๋ฌผ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ, ๊ฐ•์•„์ง€ ํ•œ๋งˆ๋ฆฌ๋ฅผ ๋™๋ฌผ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ์— ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ‹€๋ฆผ์ด ์—†์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด ์ง€ํ–ฅ์€ ์ธ๊ฐ„์˜ ๋…ผ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ํž˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ static(์ •์  ๋ฉ”์†Œ๋“œ) ๊ด€๋ จ ์–˜๊ธฐํ•  ๋•Œ Math ํด๋ž˜์Šค ์˜ˆ์‹œ๋ฅผ ๋“ค์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ...

์ƒ์†์€ ์–ด๋–ค ๊ฒƒ์„ ๋“ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

 

๋ฐ”๋กœ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ƒ์œ„ ํด๋ž˜์Šค์ธ Object ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.

Object ํด๋ž˜์Šค๋Š” ์ž๋ฐ”์˜ ํด๋ž˜์Šค ์ƒ์† ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object  ํŠน์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์–ด๋–ค ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๊ฑด toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ง€์š”! 


๋‹ค์ค‘์ƒ์†์ด ์•ˆ๋˜๋Š” ์ด์œ 

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ์ž ๊น!

Dog ํด๋ž˜์Šค๋ฅผ

public class Dog extends ํฌ์œ ๋ฅ˜, ๋™๋ฌผ {
    Dog() {
    	name = "๊ฐ•์•„์ง€";
    }
}

์œ„์™€ ๊ฐ™์ด ํฌ์œ ๋ฅ˜์™€ ๋™๋ฌผ ๋ชจ๋‘ ์ƒ์†๋ฐ›์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

์•„์‰ฝ๊ฒŒ๋„(?) ์ž๋ฐ”์—์„œ๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

C++์„ ๋ฐœ์ „/๋‹จ์ˆœํ™” ํ•˜๋ฉด์„œ ๋‹ค์ค‘ ์ƒ์†์„ ๊ณผ๊ฐํžˆ ๋นผ๋ฒ„๋ฆฐ ์ด์œ ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ธ์–ด๊ณต์ฃผ๋ฅผ ์˜ˆ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ธ์–ด๋Š” ๐Ÿง‍โ™€๏ธ์‚ฌ๋žŒ๊ณผ ๐ŸŸ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ƒ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค.

 

๋งŒ์•ฝ ์ธ์–ด์—๊ฒŒ ์ˆ˜์˜ํ•ด! ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ธ์–ด๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ• ๊นŒ์š”?

์‚ฌ๋žŒ์ฒ˜๋Ÿผ? ์•„๋‹ˆ๋ฉด ๋ฌผ๊ณ ๊ธฐ์ฒ˜๋Ÿผ? ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋‹ค์ค‘ ์ƒ์†์˜ ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฌธ์ œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ž๋ฐ”๋Š” ๋‹ค์ค‘ ์ƒ์†์„ ๊ณผ๊ฐํžˆ ๋ฒ„๋ฆฌ๊ณ , ๋Œ€์‹  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋Œ€์ฒดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค

ํ˜น์‹œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ƒ์†์ฒ˜๋Ÿผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๊ตฌํ˜„ ํด๋ž˜์Šค is able to ์ธํ„ฐํŽ˜์ด์Šค

โžก๏ธ ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค!

โžก๏ธ ์ฐธ์ƒˆ๋Š” ๋‚  ์ˆ˜ ์žˆ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” be able to, ์ฆ‰ "๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”" ์ด๋ผ๋Š” ํ‘œํ˜„ ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง ํ•ฉ๋‹ˆ๋‹ค.

  • Serializable ์ธํ„ฐํŽ˜์ด์Šค : ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋Š”
  • Comparable ์ธํ„ฐํŽ˜์ด์Šค : ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”
  • Runnable ์ธํ„ฐํŽ˜์ด์Šค : ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”

์ •๋ฆฌ

์งˆ๋ฌธ ํ•˜๋‚˜ ํ•˜๋ฉฐ ์ด์ƒ ๋งˆ๋ฌด๋ฆฌ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ƒ์œ„ ํด๋ž˜์Šค๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—๊ฒŒ ๋ฌผ๋ ค์ค„ ํŠน์„ฑ์ด ๋งŽ์„ ์ˆ˜๋ก ์ข‹์„๊นŒ์š”? ์ ์„ ์ˆ˜๋ก ์ข‹์„๊นŒ์š”?

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„์„ ๊ฐ•์ œํ•  ๋ฉ”์†Œ๋“œ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ข‹์„๊นŒ์š”? ์ ์„ ์ˆ˜๋ก ์ข‹์„๊นŒ์š”?

 

์ƒ๊ฐํ•ด๋ณด๋ฉด โญ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ํ’์„ฑํ•  ์ˆ˜๋ก ์ข‹๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ•์ œํ•  ๋ฉ”์†Œ๋“œ๊ฐ€ ์ ์„ ์ˆ˜๋ก ์ข‹๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์ด์œ ๋Š” ์—ฌ๊ธฐ์„œ ์‚ดํŽด๋ณด๋ฉด ์ข‹์„ํ…๋ฐ ๊ทธ๋Ÿผ ๊ธ€์˜ ๋ณธ์งˆ์ด ํ๋ ค์ง€๋‹ˆ ์ด๊ฑด ๋‹ค์Œ ์‹œ๊ฐ„์— ์ด์–ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธ€๋กœ ์ž‘์„ฑํ•˜๋ ค ํ–ˆ๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด ์ œ๊ฐ€ ๋‚˜์ค‘์— ๋ณผ ๋•Œ ๋งํฌ ์ด๋™ํ•˜๊ธฐ ๊ท€์ฐฎ์„ ๊ฒƒ ๊ฐ™์•„์„œ ์—ฌ๊ธฐ๋‹ค ๋ถ™์ด๊ฒ ์Šต๋‹ˆ๋‹ค. ใ…Ž

(3.1 LSP, 3.2 ISP ์ฐธ๊ณ )

ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•œ ๋ฌธ์žฅ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

โญํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. 

๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ ํ•˜์œ„ ํด๋ž˜์Šค is a ์ƒ์œ„ ํด๋ž˜์Šค ์•„๋‹˜?!

 

์ด๊ฒŒ ๋งž์•˜์œผ๋ฉด ์ œ๊ฐ€ ์ด ๊ธ€์„ ์“ฐ๊ณ  ์žˆ์ง€ ์•Š์•˜๊ฒ ์ฃ !? ๐Ÿ˜

 

๋‹ค์‹œ ๋“ฑ์žฅ

๋ฌผ๋ก  ์•„์ฃผ ํ‹€๋ฆฐ ๋ง์€ ์•„๋‹™๋‹ˆ๋‹ค๋งŒ, ์ข€ ๋” ์•Œ๋งž์€ ๋ฌธ์žฅ์ด ์žˆ์œผ๋‹ˆ ๊ทธ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

โญ ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค

์ด๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๊ฐœ๋ฐœ์ž ์‚ฌ์ดํŠธ์ธ MSDN์—์„œ๋„ a kind of๋ผ๊ณ  ๋ช…์‹œํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์•„์ฃผ ์ด์ƒํ•œ ์†Œ๋ฆฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

 

์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ•œ๋ฒˆ ๋“ค์–ด๋ณด๋ฉด ํ™• ์ดํ•ด๊ฐ€ ๋˜์‹ค๊ฒ๋‹ˆ๋‹ค.

 

ํŽญ๊ท„ is a kind of ์กฐ๋ฅ˜ => ํŽญ๊ท„์€ ์กฐ๋ฅ˜์˜ ํ•œ ๋ถ„๋ฅ˜๋‹ค.

ํŽญ๊ท„ is a kind of ๋™๋ฌผ => ํŽญ๊ท„์€ ๋™๋ฌผ์˜ ํ•œ ๋ถ„๋ฅ˜๋‹ค.

LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)

๋ฆฌ์Šค..์ฝ”ํ”„ ๋ญ์š”? ๋ง์ด ์กฐ๊ธˆ ์–ด๋ ต๊ณ , ๋”ฑ ๋“ค์—ˆ์„ ๋•Œ ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ํŒŒ์•…์ด ์ข€ ํž˜๋“ญ๋‹ˆ๋‹ค.(์ €๋งŒ ๊ทธ๋Ÿด์ง€๋„

 

๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์€ ๊ฐ์ฒด์ง€ํ–ฅ 5์›์น™ ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ 5์›์น™์€ ์ถ”ํ›„์— ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ๋ณธ์ด ๋๋‚˜๋ฉด ์•Œ์•„๋ณผํ…๋ฐ์š”! ์ƒ์†๊ณผ ์—ฐ๊ด€์ด ๊นŠ๋‹ค๋ณด๋‹ˆ ๋จผ์ € ๋‚˜์™”๋„ค์š”.ใ…Žใ…Ž

 

์•„๋ฌดํŠผ ๋ฆฌ์Šค์ฝ”ํ”„ ์ง€ํ™˜ ์›์น™์€

 "ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์–ธ์ œ๋‚˜ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์›์น™" ์ž…๋‹ˆ๋‹ค.

 

์›์น™์ด๋ผ๊ณ  ํ•ด์„œ ํ•ญ์ƒ ์ด๋Ÿฐ ์‚ฌํ•ญ๋“ค์„ ๊ณ ๋ คํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์•ž์„œ ๋ฐฐ์šด "ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค" ๋Œ€๋กœ ๊ตฌํ˜„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์ด๋ฏธ LSP๋ฅผ ์ž˜ ์ง€ํ‚ค๊ณ  ์žˆ๋Š”๊ฑฐ๋‹ˆ๊นŒ์š”. ๐Ÿ˜

๋˜ํ•œ LSP๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ดํ•ดํ•  ๋•Œ ๋ง‰ํž˜์ด ์—†์–ด์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

public class Person {
    String name;
    int age;
    char gender;

    public void walk() {
        System.out.println(name + "์ด ๊ฑท๋Š”๋‹ค.");
    }
}
public class Student extends Person {
    int studentID;

    public Student(int studentID, String name, int age, char gender) {
        this.studentID = studentID;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public void study() {
        System.out.println(name + "์ด ๊ณต๋ถ€ํ•œ๋‹ค." );
    }
}
public class Soldier extends Person {
    int serialNum;

    public Soldier(int serialNum, String name, int age, char gender) {
        this.serialNum = serialNum;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public void shoot() {
        System.out.println(name + "์ด ์‚ฌ๊ฒฉํ•˜๋‹ค.");
    }
}
public class Main {
    public static void main(String[] args) {
        Person kim = new Student(202301, "๊น€ํ•™์ƒ", 18, 'F');
        Person lee = new Soldier(160320, "์ด๊ตฐ์ธ", 22, 'M');
        Student park = new Student(2,"๋ฐ•๊ฒฝ๋ฆผ", 32, 'F');

        Student s = (Student)kim;
        Soldier m = (Soldier)lee;

        s.study();
        m.shoot();
        park.walk();
    }
}
๊น€ํ•™์ƒ์ด ๊ณต๋ถ€ํ•œ๋‹ค.
์ด๊ตฐ์ธ์ด ์‚ฌ๊ฒฉํ•˜๋‹ค.
๋ฐ•๊ฒฝ๋ฆผ์ด ๊ฑท๋Š”๋‹ค.

๊ตฟ!

๋ฐ˜๋Œ€๋กœ ๊ณ„์ธต๋„/์กฐ์ง๋„๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

// 1. ๊ณ„์ธต๋„๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋“œ
์•„๋ฒ„์ง€ ์˜ํฌ = new ๋”ธ();

๋”ธ ์˜ํฌ2 = (๋”ธ)์˜ํฌ;
์˜ํฌ2.๊พธ์ง–๋Š”๋‹ค();

// 2. ๋ถ„๋ฅ˜๋„๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋“œ
์‚ฌ๋žŒ ์˜ํฌ = new ํ•™์ƒ();

ํ•™์ƒ ์˜ํฌ2 = (ํ•™์ƒ)์˜ํฌ;
์˜ํฌ2.๊ณต๋ถ€ํ•˜๋‹ค();

์•ˆ์ข‹์€ ์˜ˆ์‹œ ๋ณด์—ฌ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ธด ์ฝ”๋“œ๋ฅผ ๋˜ ๋ณด์—ฌ๋“œ๋ฆฌ๊ธด ์ข€ ๊ทธ๋ž˜์„œ ์•ฝ์‹์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

์–ธ๋œป ๋ด๋„ ๊ณ„์ธต๋„๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋“œ๋Š” ๊ฐ‘์ž๊ธฐ ์˜ํฌ๊ฐ€ ์•„๋ฒ„์ง€ ์—ญํ• ์„ ํ•˜๋Š”๊ฒŒ ๊ธฐ๊ดดํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋ถ„๋ฅ˜๋„๋ฅผ ๊ณ ๋ คํ•œ ์ฝ”๋“œ๋Š” ๋…ผ๋ฆฌ์— ๋ง‰ํž˜์ด ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ฒ˜๋Ÿผ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ์ด์šฉํ•˜๋ฉด ํ•˜์œ„  ๊ฐ์ฒด๋Š” ์ƒ์œ„ ๊ฐ์ฒด์ธ ์ฒ™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ) ๊ณ ๋ž˜๋Š” ๋™๋ฌผ ์—ญํ• ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™ ์ค‘ SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ์„ค๋ช…๋“œ๋ฆฌ๋ฉด ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—๋Š” ํ•˜๋‚˜์˜ ์—ญํ• ๋งŒ ๋‹ด๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

ํ•˜๋‚˜์˜ ์—ญํ• (์ฑ…์ž„)๋งŒ ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ SRP ๋ฟ์ด ์•„๋‹™๋‹ˆ๋‹ค!

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜

 

๋‹จ์ผ ์ฑ…์ž„ ์›์น™์€ ํด๋ž˜์Šค๋ฅผ ํ† ๋ง‰(?)๋‚ด๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์€ ๋‹ค์ค‘ ์ธ๊ฒฉํ™”(?) ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์„ค๊ณ„์ž์˜ ์ทจํ–ฅ์— ๋”ฐ๋ผ SRP ํ˜น์€ ISP ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด SRP๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ฃผ์ œ๋กœ ๋‚˜์˜ค๋ฉด ํ•ญ์ƒ ๋‚˜์˜ค๋Š” ์–˜๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์ธํ„ฐํŽ˜์ด์Šค ์ตœ์†Œ์ฃผ์˜ ์›์น™ ์ž…๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ์™ธ๋ถ€์— ์ œ๊ณตํ•  ๋•Œ๋Š” ์ตœ์†Œํ•œ์˜ ๋ฉ”์†Œ๋“œ๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ž ์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹น์—ฐํ•œ ์–˜๊ธฐ ์ž…๋‹ˆ๋‹ค.

'ํ•™์ƒ' ์ธํ„ฐํŽ˜์ด์Šค์— '์‚ฌ๊ฒฉํ•˜๋‹ค()' ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•  ํ•„์š”๋„ ์—†๊ณ  ์ œ๊ณตํ•ด์„œ๋„ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์˜ˆ์ œ ์ฝ”๋“œ ๋ณด์—ฌ๋“œ๋ฆฌ๋ฉฐ ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

public interface Studiable {
    void study();
}

public interface Shootable {
    void shoot();
}
public class Person {
    String name;
    int age;
    char gender;

    public void walk() {
        System.out.println(name + "์ด ๊ฑท๋Š”๋‹ค.");
    }
}

public class Student extends Person implements Studiable{
    int studentID;

    public Student(int studentID, String name, int age, char gender) {
        this.studentID = studentID;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public void study() {
        System.out.println(name + "์ด ๊ณต๋ถ€ํ•œ๋‹ค.");
    }
}
public class Main {
    public static void main(String[] args) {
        Student kim = new Student(2023, "๊น€ํ•™์ƒ", 18, 'F');
        kim.study();
    }
}

// ๊น€ํ•™์ƒ์ด ๊ณต๋ถ€ํ•œ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด!

์ธํ„ฐํŽ˜์ด์Šค๋Š” "~ ํ•  ์ˆ˜ ์žˆ๋Š”(is able to)" ์ด๋ผ๋Š” ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ •์„ ์ž…๋‹ˆ๋‹ค.

์ •๋ฆฌ

  • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ '์žฌ์‚ฌ์šฉ' ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ 'ํ™•์žฅ' ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ƒ์†์€ is a kind of ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

'๐Ÿ“š Study > OOP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

OOP(2) static vs instance  (0) 2023.02.22
OOP(1) ์ถ”์ƒํ™”๋Š” ๋ชจ๋ธ๋ง  (0) 2023.02.22
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!