Search

닀쀑 상속 & 닀쀑 κ΅¬ν˜„

닀쀑 상속

μ—¬λŸ¬ λŒ€μƒμœΌλ‘œλΆ€ν„° λ¬Όλ € λ°›λŠ” 것
β€’
ν΄λž˜μŠ€λŠ” 닀쀑상속 λΆˆκ°€: μžλ°”μ—μ„œλŠ” ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 클래슀λ₯Ό λ™μ‹œμ— 상속받을 수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” '닀이아λͺ¬λ“œ 문제'라고 λΆˆλ¦¬λŠ” 좩돌 문제λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.
β€’
μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑상속 κ°€λŠ₯: μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œμ— 상속(extends)ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

닀쀑 κ΅¬ν˜„

ν•œ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„(implement)ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
β€’
클래슀의 닀쀑 κ΅¬ν˜„: ν΄λž˜μŠ€λŠ” μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œμ— κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 닀쀑 μƒμ†μ˜ μž₯점을 μ–»μœΌλ©΄μ„œλ„ 좩돌 문제λ₯Ό ν”Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
public class MyClass extends ParentClass implements Interface1, Interface2, Interface3 { // 클래슀 λ‚΄μš© }
Java
볡사
β€’
μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ˜ 이점: 닀쀑 κ΅¬ν˜„μ„ 톡해 ν΄λž˜μŠ€λŠ” μ—¬λŸ¬ 역할을 μˆ˜ν–‰ν•  수 있으며, λ‹€μ–‘ν•œ νƒ€μž…μœΌλ‘œ 참쑰될 수 μžˆμŠ΅λ‹ˆλ‹€.

닀쀑 상속 & 닀쀑 κ΅¬ν˜„ μ˜ˆμ‹œμ½”λ“œ

πŸ“¦ Project └── πŸ“‚ Interface β”œβ”€β”€ πŸ“„ RemoteControl.java β”œβ”€β”€ πŸ“„ Microphone.java β”œβ”€β”€ πŸ“„ Searchable.java β”œβ”€β”€ πŸ“„ SmartRemoteControl.java β”œβ”€β”€ πŸ“„ SmartTelevision.java └── πŸ“„ Main.java
Plain Text
볡사

RemoteControl.java

package Day08.Ex02_MultiImplement; public interface RemoteControl { int MAX_VOLUME = 300; int MIN_VOLUME = 0; void turnOn(); void turnOff(); void setVolume(int volume); void setChannel(int channel); default void setMute(boolean mute) { if( mute ) { System.out.println("μŒμ†Œκ±° μ„€μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); setVolume(MIN_VOLUME); } else { System.out.println("μŒμ†Œκ±° ν•΄μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€."); setVolume(10); } } static void changeBatter() { System.out.println("배터리 ꡐ체"); } }
Java
볡사

Microphone.java

package Day08.Ex02_MultiImplement; public interface Microphone { int inputVolumeMax = 50; // μŒμ„± 인식 μ΅œλŒ€ λ³Όλ₯¨ int inputVolumeMin = 0; // μŒμ„± 인식 μ΅œμ†Œ λ³Όλ₯¨ // μŒμ„± 인식 String receiveVoice(String voice); }
Java
볡사

Searchable.java

package Day08.Ex02_MultiImplement; // 검색 μΈν„°νŽ˜μ΄μŠ€ public interface Searchable { // 채널 검색 // : 검색어에 ν•΄λ‹Ήν•˜λŠ” μ±„λ„λ²ˆν˜Έλ₯Ό λ°˜ν™˜ int channelSearch(String keyword); // 컨텐츠 검색 // : 검색어에 ν•΄λ‹Ήν•˜λŠ” 컨텐츠λ₯Ό λ°˜ν™˜ String[] contentSerach(String keyword); }
Java
볡사

SmartRemoteControl.java

package Day08.Ex02_MultiImplement; // μΈν„°νŽ˜μ΄μŠ€ 닀쀑 상속 // public intreface μΈν„°νŽ˜μ΄μŠ€λͺ… extends μΈν„°νŽ˜μ΄μŠ€A, μΈν„°νŽ˜μ΄μŠ€B ... {} public interface SmartRemoteControl extends RemoteControl, Microphone { // ν„°μΉ˜νŒ¨λ“œ κΈ°λŠ₯ // - x, y μ’Œν‘œ μœ„μΉ˜μ— ν„°μΉ˜νŒ¨λ“œλ₯Ό 클릭 void touch(int x, int y); }
Java
볡사

SmartTelevision.java

package Day08.Ex02_MultiImplement; import java.text.MessageFormat; // 닀쀑 κ΅¬ν˜„ // public class 클래슀λͺ… implements μΈν„°νŽ˜μ΄μŠ€A, μΈν„°νŽ˜μ΄μŠ€B .. { } public class SmartTelevision implements SmartRemoteControl, Searchable { int volume; // λ³Όλ₯¨ int channel; // 채널 String keyword; // 검색어 int x, y; // ν„°μΉ˜νŒ¨νŠΈ μ’Œν‘œ @Override public void turnOn() { System.out.println("전원 ON"); } @Override public void turnOff() { System.out.println("전원 OFF"); } @Override public void setVolume(int volume) { this.volume = volume; System.out.println("volume : " + volume); } @Override public void setChannel(int channel) { this.channel = channel; System.out.println("channel : " + channel); } @Override public String receiveVoice(String voice) { System.out.println("μŒμ„± μž…λ ₯ : " + voice); return "voice : " + voice; } @Override public int channelSearch(String keyword) { int channel = 0; switch (keyword) { case "SBS": channel = 5; break; case "KBS": channel = 7; break; case "MBC": channel = 11; break; case "Mnet": channel = 27; break; case "ENA": channel = 30; break; } return channel; } @Override public String[] contentSerach(String keyword) { String[] movieContents = {"아이언맨", "νƒ€μ§œ", "μΈμ…‰μ…˜", "λ°λ“œν’€", "λ°˜μ§€μ˜μ œμ™•","λ²”μ£„λ„μ‹œ"}; String[] idolContents = {"μ—μŠ€νŒŒ", "μ•„μ΄λΈŒ", "λ‰΄μ§„μŠ€", "μ†Œλ…€μ‹œλŒ€", "BTS", "2NE1"}; String[] recommendContend = {"메타 μ½”λ―Έλ”” 클럽", "κ²½μ˜μžλ“€", "ν”Όμ‹λŒ€ν•™", "μ½”λΉ…", "개콘", "λ¨Ήλ°©"}; String[] choiceContents; switch(keyword) { case "μ˜ν™”" : choiceContents = movieContents; break; case "μ•„μ΄λŒ" : choiceContents = idolContents; break; default: choiceContents = recommendContend; break; } return choiceContents; } @Override public void touch(int x, int y) { this.x = x; this.y = y; System.out.println("(x,y) : " + MessageFormat.format("({}, {})", x, y)); // System.out.println("(" + x + ", " + y + ")"); } }
Java
볡사

Main.java

package Day08.Ex02_MultiImplement; import java.util.Scanner; public class Main { public static void main(String[] args) { SmartTelevision tv = new SmartTelevision(); tv.turnOn(); tv.setVolume(20); int channel = tv.channelSearch("SBS"); tv.setChannel(channel); Scanner sc = new Scanner(System.in); System.out.print("검색할 컨텐츠 : "); String keyword = sc.nextLine(); String[] content = tv.contentSerach(keyword); for (int i = 0; i < content.length; i++) { System.out.print( content[i] ); if( i < content.length-1 ) System.out.print(", "); } System.out.println(); tv.receiveVoice("λ‰΄μŠ€ ν‹€μ–΄μ€˜"); tv.turnOff(); sc.close(); } }
Java
볡사