めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
μ½”λ”© 짐 πŸ’ͺ
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
  • μΉ΄ν…Œκ³ λ¦¬ (135)
    • 개발 ν™˜κ²½ ꡬ좕 (12)
      • 개발 ν™˜κ²½ (5)
      • DB (0)
      • Node.js (4)
      • ν˜•μƒ 관리 (2)
      • Spring (1)
    • μ›Ή (11)
      • React (5)
      • 슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½__μ›Ή (6)
    • λͺ¨λ°”일 (2)
      • μ•ˆλ“œλ‘œμ΄λ“œ (2)
    • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (55)
      • C (13)
      • Python (15)
      • SQL (5)
      • Java (22)
    • 사물인터넷 (11)
      • 아두이노 (11)
    • 일상 (31)
      • λ§›μ§‘ (13)
      • λž­ν‚Ήλ‹­μ»΄ (4)
      • ν›„κΈ° (11)
      • μš”λ¦¬ (3)
      • μž‘λ‹΄ (0)
    • ꡐ양 (4)
      • 심리학 (3)
      • ν…Œλ‹ˆμŠ€ (1)
    • 자격증 (9)
      • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (9)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ’» github

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ

μ½”λ”© 짐 πŸ’ͺ

[Java] μžλ°” 좔상 λ©”μ†Œλ“œ, 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Java

[Java] μžλ°” 좔상 λ©”μ†Œλ“œ, 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€

2023. 1. 28. 00:24

[ 좔상 λ©”μ†Œλ“œ(abstract method) ]

더보기

[ 좔상 λ©”μ†Œλ“œ ]

- ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ μ˜€λ²„λΌμ΄λ”© ν•΄μ•Όν•˜λŠ” λ©”μ†Œλ“œ

- 좔상 λ©”μ†Œλ“œκ°€ ν¬ν•¨λœ 클래슀λ₯Ό μƒμ†λ°›λŠ” ν•˜μœ„ ν΄λž˜μŠ€κ°€

  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

- 좔상 λ©”μ†Œλ“œλŠ” μ„ μ–ΈλΆ€λ§Œμ΄ μ‘΄μž¬ν•˜λ©° κ΅¬ν˜„λΆ€λŠ” μž‘μ„± x

 

[ ν˜•μ‹ ]

abstract λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œλͺ… ( );

 

 

[ 좔상 클래슀(abstract class) ]

더보기

[ 좔상 클래슀 ]

- ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀

- 객제 μ§€ν–₯ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ νŠΉμ§•μΈ λ‹€ν˜•μ„±μ„ κ°€μ§€λŠ” λ©”μ†Œλ“œμ˜ 집합을 μ •μ˜

- 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘μ—…μ„ μˆ˜ν‰μ  뢄할이 κ°€λŠ₯, 레벨 λ‹¨μœ„ ꡬ쑰 ν˜•νƒœλ‘œ 관리 κ°€λŠ₯

- 좔상 ν΄λž˜μŠ€λŠ” 자체적으둜 객체 생성이 λΆˆκ°€λŠ₯ ν•˜λ―€λ‘œ

   λ°˜λ“œμ‹œ ν•˜μœ„ 클래슀λ₯Ό ν†΅ν•œ 좔상 λ©”μ†Œλ“œλ₯Ό λ¨Όμ € κ΅¬ν˜„ν•΄μ•Ό ν›„ 객체 생성을 해야함.

 

[ 좔상 클래슀 예제 ]

// -- abstract class --
abstract class EmptyCan{
	// -- abstract method --
	public abstract void sound();
	public abstract void who();
	// 좔상 클래슀의 νŠΉμ§• : 일반 λ©”μ†Œλ“œ λ˜ν•œ κ°€μ§ˆ 수있음
	public void doSth() {
		sound();
		who();
	}
}

public class AbstractClassTest extends EmptyCan{
	
	// -- method overriding --
	public void sound() {
		System.out.println("EmptyCan : 빈 깑톡은 μ†Œλ¦¬κ°€ μš”λž€ν•˜λ‹€");
	}
	public void who() {
		System.out.println("EmptyCan : λ‚˜λŠ” 빈 κΉ‘ν†΅μž…λ‹ˆλ‹€.");
	}
	
	public void sayHello() {
		System.out.println("NewCan : μΆ”μƒν΄λž˜μŠ€ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.");
	}
	
	public static void main(String[] args) {
		AbstractClassTest nc = new AbstractClassTest();
//		EmptyCan ec = new EmptyCan(); -- Error : 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ 생성 λΆˆκ°€
		EmptyCan ec = nc; 	// 좔상 클래슀λ₯Ό 상속받아 μž¬μ •μ˜ν•œ ν•˜μœ„ 클래슀이기 λ•Œλ¬Έμ— 였λ₯˜ λ°œμƒ x 
		
		ec.sound();
		ec.who();
//		ec.sayHello();
		nc.sayHello();
		
		ec.doSth();
	}
}

/* [좜λ ₯ κ²°κ³Ό]
    EmptyCan : 빈 깑톡은 μ†Œλ¦¬κ°€ μš”λž€ν•˜λ‹€
    EmptyCan : λ‚˜λŠ” 빈 κΉ‘ν†΅μž…λ‹ˆλ‹€.
    NewCan : μΆ”μƒν΄λž˜μŠ€ ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.
    EmptyCan : 빈 깑톡은 μ†Œλ¦¬κ°€ μš”λž€ν•˜λ‹€
    EmptyCan : λ‚˜λŠ” 빈 κΉ‘ν†΅μž…λ‹ˆλ‹€.
*/

 

 

 

 

[ μΈν„°νŽ˜μ΄μŠ€(interface) ]

더보기

[ μΈν„°νŽ˜μ΄μŠ€ ]

- 좔상 λ©”μ†Œλ“œλ§Œμ„ ν¬ν•¨ν•˜λŠ” μΆ”μƒν΄λž˜μŠ€μ˜ 일쒅

- λ©”μ†Œλ“œλŠ” λ¬΅μ‹œμ μœΌλ‘œ public abstract둜 μ„ μ–Έ

- μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜ν•œ λ³€μˆ˜λŠ” public static final ν‚€μ›Œλ“œλ₯Ό μƒλž΅ν•΄λ„

  μžλ™μœΌλ‘œ public static final이 μ μš©λ˜μ–΄ μƒμˆ˜λ‘œ μ„ μ–Έλœλ‹€.

- κ΅¬ν˜„μ„ μœ„ν•΄ implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©

- extends ν‚€μ›Œλ“œλ₯Ό ν†΅ν•œ μƒμ†μœΌλ‘œλŠ” 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—

  implementsλ₯Ό ν†΅ν•œ 닀쀑 μƒμ†μœΌλ‘œ 이λ₯Ό ν•΄κ²°

- 자체적으둜 객체 생성이 λΆˆκ°€λŠ₯ ν•˜κΈ° λ•Œλ¬Έμ— Implementsλ₯Ό μ‚¬μš©ν•˜μ—¬

  상속(κ΅¬ν˜„)받은 ν•˜μœ„ 클래슀(κ΅¬ν˜„μ²΄)μ—μ„œ λ°˜λ“œμ‹œ overrideλ₯Ό 톡해 κ΅¬ν˜„ ν•„μš”

- μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€μ˜ 일쒅이기 λ•Œλ¬Έμ— κ΅¬ν˜„μ„ λ°›λŠ” κ΅¬ν˜„μ²΄μ—μ„œ

  μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€λŠ” κ°•μ œμ„±μ„ 가짐

 

 

[ μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš© 예제 1 ]

class Animal{
	String name;
	void setName(String name) {
		this.name = name;
	}
}

// Animal 클래슀λ₯Ό μƒμ†λ°›λŠ” Ant, Panda 클래슀
class Ant extends Animal{ }
class Panda extends Animal { }

// 객체λ₯Ό 전달받아 객체에 따라 λ‹€λ₯Έ 좜λ ₯을 μˆ˜ν–‰ν•˜λŠ” AnimalBarking 클래슀
class AnimalBarking {
	void barking(Ant ant) {
		System.out.println("κ°œλ―ΈλŠ” κ°¬κ°¬...");
	}
	void barking(Panda panda) {
		System.out.println("νŒλ‹€λŠ” 팜팜...");
	}
}

public class TestCode {
	
	public static void main(String[] args) {
		Ant ant = new Ant();
		Panda panda = new Panda();
		AnimalBarking ab = new AnimalBarking();
		
		ab.barking(ant);
		ab.barking(panda);
	}
}

/* [좜λ ₯ κ²°κ³Ό]
    κ°œλ―ΈλŠ” κ°¬κ°¬...
	νŒλ‹€λŠ” 팜팜... 
*/
μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” Animal 클래슀λ₯Ό μƒμ†λ°›λŠ” Ant, Panda ν΄λž˜μŠ€μ™€,
Ant, Panda 두 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 전달받아 좜λ ₯ν•˜λŠ” barking() λ©”μ†Œλ“œλ₯Ό κ°€μ§„
AnimalBarking ν΄λž˜μŠ€κ°€ μž‘μ„±λ˜μ–΄ μžˆλ‹€.

λ§Œμ•½ AnimalBarking ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λ‘œλ”©ν•˜κ³  μžˆλŠ” barking() λ©”μ†Œλ“œκ°€ 단지 Ant, Panda 
두 객체λ₯Ό μ „λ‹¬λ°›λŠ” 것이 μ•„λ‹ˆλΌ 무수히 λ§Žμ€ 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œμ„œ 전달받을 경우
맀번 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ΄ λ‹€λ₯Έ ν˜•νƒœλ‘œ μ˜€λ²„λ‘œλ”©μ„ ν•΄μ€˜μ•Ό ν•œλ‹€.

 

[ μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš© 예제 2 ]

// Snail, Dog ν΄λž˜μŠ€κ°€ 좔가될 경우
(... μƒλž΅ ...)

class Ant extends Animal{ }
class Panda extends Animal{ }
class Snail extends Animal{ }
class Dog extends Animal{ }

class AnimalBarking {
	void barking(Ant ant) {
		System.out.println("κ°œλ―ΈλŠ” κ°¬κ°¬...");
	}
	void barking(Panda panda) {
		System.out.println("νŒλ‹€λŠ” 팜팜...");
	}
	void barking(Snail snail) {
		System.out.println("λ‹¬νŒ½μ΄λŠ” ν•‘ν•‘...");
	}
	void barking(Dog dog) {
		System.out.println("κ°•μ•„μ§€λŠ” λŒ•λŒ•...");
	}
}

(... μƒλž΅ ...)
μœ„μ˜ μ½”λ“œμ™€ 같이 barking() λ©”μ†Œλ“œλ₯Ό 맀번 μ˜€λ²„λ‘œλ”©ν•΄μ•Ό ν•œλ‹€.
이럴 경우 μ•„λž˜μ™€ 같이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•˜μ—¬ μˆ˜μ •ν•  수 μžˆλ‹€.

 

[  μΈν„°νŽ˜μ΄μŠ€ 예제 3 ]

// InterfaceλŠ” 본래 λ³„κ°œμ˜ 파일둜 μ €μž₯ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€
interface AnimalInterface{
	// 좔상 λ©”μ†Œλ“œ μ„ μ–Έ
	String getName();	// λ¬΅μ‹œμ μœΌλ‘œ abstract둜 μ„ μ–Έ
	abstract String getBarking();
}

class Animal{
	String name;
	void setName(String name) {
		this.name = name;
	}
}

// Animal 클래슀λ₯Ό μƒμ†λ°›λŠ” Ant, Panda, Snail 클래슀
class Ant extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "개미";
	}
	@Override
	public String getBarking() {
		return "κ°¬κ°¬...";
	} 
}

class Panda extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "νŒλ‹€";
	}
	@Override
	public String getBarking() {
		return "팜팜...";
	} 
}

class Snail extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "λ‹¬νŒ½μ΄";
	}
	@Override
	public String getBarking() {
		return "ν•‘ν•‘...";
	} 
}

class AnimalBarking {
	// interface 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 받을 수 있게 λ³€κ²½
	void barking(AnimalInterface a_interface) {
		System.out.println(a_interface.getName() + "λŠ” " + a_interface.getBarking());
	}
}

public class TestCode {
	
	public static void main(String[] args) {
		Ant ant = new Ant();
		Panda panda = new Panda();
		Snail snail = new Snail();
		AnimalBarking ab = new AnimalBarking();
		
		ab.barking(ant);
		ab.barking(panda);
		ab.barking(snail);
	}
}

/* [좜λ ₯ κ²°κ³Ό]
	κ°œλ―ΈλŠ” κ°¬κ°¬...
    νŒλ‹€λŠ” 팜팜...
    λ‹¬νŒ½μ΄λŠ” ν•‘ν•‘...
*/
μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•œ μ½”λ“œμ—μ„œ Ant, Panda, Snailκ³Ό 같은 ν΄λž˜μŠ€λ“€μ€
AnimalInterfaceλΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속(κ΅¬ν˜„)λ°›κ³  μžˆλ‹€.

μ΄λ•Œ κ΅¬ν˜„λ°›μ€ 각 ν΄λž˜μŠ€λ“€μ€ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λͺ…μ‹œλ˜μ–΄ μžˆλŠ” 좔상 λ©”μ†Œλ“œμΈ
getName()κ³Ό getBarking()을 λ°˜λ“œμ‹œ κ΅¬ν˜„(μ˜€λ²„λ‘œλ”©)ν•΄μ€˜μ•Ό ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™œμš©ν•˜λ©΄ μœ„μ™€ 같이 곡동 μž‘μ—…μ„ μœ„ν•œ ν΄λž˜μŠ€κ°€ λŠ˜μ–΄λ‚˜λ”λΌλ„ 
ν•œ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 ν•΄κ²° κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

[ κΈ°λ³Έ λ©”μ†Œλ“œ(Default Methods) ]

더보기

- JDK 8버전 μ΄ν›„λ‘œλΆ€ν„° κΈ°λ³Έ λ©”μ†Œλ“œ(Default method) μ‚¬μš© κ°€λŠ₯

- 본래 μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλŠ” μΆ”μƒλ©”μ†Œλ“œλ‘œμ„œ κ΅¬ν˜„μ²΄λ₯Ό κ°€μ§ˆ 수 μ—†μŒ

- κΈ°λ³Έ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ κ΅¬ν˜„λœ ν˜•νƒœμ˜ λ©”μ†Œλ“œ μž‘μ„± κ°€λŠ₯

- κΈ°λ³Έ λ©”μ†Œλ“œμ˜ 경우 λ©”μ†Œλ“œμ˜ λ°˜ν™˜νƒ€μž… μ•žμ— default ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬ μ„ μ–Έ

 

[ κΈ°λ³Έ λ©”μ†Œλ“œ 예제 ]

interface AnimalInterface{
	String getName();
	String getBarking();
	
    // κΈ°λ³Έ λ©”μ†Œλ“œ(default method) μ„ μ–Έ
	default void animalBarking() {
		System.out.println(getName() + "λŠ” " + getBarking());
	}
}

class Animal{
	String name;
	void setName(String name) {
		this.name = name;
	}
}

// Animal 클래슀λ₯Ό μƒμ†λ°›λŠ” Ant, Panda 클래슀
class Ant extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "개미";
	}
	@Override
	public String getBarking() {
		return "κ°¬κ°¬...";
	} 
}

class Panda extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "νŒλ‹€";
	}
	@Override
	public String getBarking() {
		return "팜팜...";
	} 
}

class Snail extends Animal implements AnimalInterface{
	@Override
	public String getName() {
		return "λ‹¬νŒ½μ΄";
	}
	@Override
	public String getBarking() {
		return "ν•‘ν•‘...";
	} 
}

/*
class AnimalBarking {
	// interface 객체λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ 받을 수 있게 λ³€κ²½
	void barking(AnimalInterface a_interface) {
		System.out.println(a_interface.getName() + "λŠ” " + a_interface.getBarking());
	}
}
*/

public class TestCode {
	
	public static void main(String[] args) {
		Ant ant = new Ant();
		Panda panda = new Panda();
		Snail snail = new Snail();
		
		ant.animalBarking();
		panda.animalBarking();
		snail.animalBarking();
	}
}
κΈ°λ³Έ λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜λ©΄ λ”°λ‘œ Animalbarking 클래슀 없이 μΈν„°νŽ˜μ΄μŠ€μ—μ„œμ˜ κ΅¬ν˜„μ„ 톡해 좜λ ₯ κ°€λŠ₯.
λ˜ν•œ κΈ°λ³Έ λ©”μ†Œλ“œλŠ” μ‹€μ œ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯함

 

 

[ μŠ€νƒœν‹± λ©”μ†Œλ“œ(Static Methods) ]

더보기

- JDK 8버전 μ΄ν›„λ‘œλΆ€ν„° μ‚¬μš© κ°€λŠ₯

- μΈν„°νŽ˜μ΄μŠ€μ— μŠ€νƒœν‹± λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•  경우 `μΈν„°νŽ˜μ΄μŠ€λͺ….μŠ€νƒœν‹±λ©”μ†Œλ“œλͺ…`처럼 

  일반 클래슀의 μŠ€νƒœν‹± λ©”μ†Œλ“œμ™€ 같이 μ‚¬μš© κ°€λŠ₯.

 

[ μŠ€νƒœν‹± λ©”μ†Œλ“œ 예제 ]

interface AnimalInterface{
	static void display() {
		System.out.println("AnimalInterface의 μŠ€νƒœν‹± λ©”μ†Œλ“œμž…λ‹ˆλ‹€.");
	}
}

public class TestCode {
	public static void main(String args[]){
    	// 일반 클래슀의 μŠ€νƒœν‹± λ©”μ†Œλ“œμ™€ 같이 객체 생성없이 호좜 κ°€λŠ₯
    	AnimalInterface.display();
    }
}

/* [좜λ ₯ κ²°κ³Ό]
	AnimalInterface의 μŠ€νƒœν‹± λ©”μ†Œλ“œμž…λ‹ˆλ‹€.
*/

 

 

μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ μœ μ‚¬μ  및 차이점

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€
    'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Java] μžλ°” λ‚΄λΆ€ν΄λž˜μŠ€(쀑첩 클래슀) - μŠ€νƒœν‹±ν΄λž˜μŠ€&μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€&μ§€μ—­ν΄λž˜μŠ€&읡λͺ…ν΄λž˜μŠ€
    • [Java] μžλ°” μΊμŠ€νŒ…
    • [Java] μžλ°” this, this()와 super, super()
    • [Java] μžλ°” 상속
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    πŸ‘Š λΈ”λ‘œκ·Έλ„ 근성이닀? πŸ‘Š

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