관리 메뉴

βœπŸ»κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έ

[ JAVA ] μΈν„°νŽ˜μ΄μŠ€ λ³Έλ¬Έ

Language/Java

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

μ©μ‹œν‚΄ 2021. 1. 8. 21:30
728x90

μžλ°” 라이브 μŠ€ν„°λ”” 8μ£Ό μ°¨ - μΈν„°νŽ˜μ΄μŠ€

github.com/whiteship/live-study/issues/8#issuecomment-756731938


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

ν”„λ‘œκ·Έλž¨μ— μ–΄λ–€ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ”μ§€ μ•Œλ €μ£ΌλŠ” λͺ…μ„Έ

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 컴파일 κ³Όμ •μ—μ„œ μƒμˆ˜λ‘œ, μ„ μ–Έν•œ λ©”μ„œλ“œλŠ” 컴파일 κ³Όμ •μ—μ„œ 좔상 λ©”μ„œλ“œλ‘œ λ³€ν™˜λ¨

μ˜ˆμ‹œ) jdbc μΈν„°νŽ˜μ΄μŠ€μ— μ„œλ“œνŒŒνŠΈμ‚¬μ—μ„œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ 규격만 보고 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λ””λΉ„μ™€μ˜ μ—°κ²° connection 객체 생성

μžλ°”μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 닀쀑 상속을 지원함


1. μΈν„°νŽ˜μ΄μŠ€ μ •μ˜ν•˜λŠ” 방법

μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ μ‹œ μ ‘κ·Ό μ œμ–΄μžμ™€ ν•¨κ»˜ interfaceν‚€μ›Œλ“œ μ‚¬μš©

μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  ν•„λ“œλŠ” public static final, λ©”μ„œλ“œλŠ” public abstract으둜 μ„ μ–Έλ˜μ–΄μ•Ό ν•œλ‹€.

( λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€μ— κ³΅ν†΅μœΌλ‘œ μ μš©λ˜λ―€λ‘œ μƒλž΅ κ°€λŠ₯, 컴파일 μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μΆ”κ°€)

→ μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•œ 클래슀λ₯Ό μ–΄λ–»κ²Œ μ‘°μž‘ν•  것인가λ₯Ό κ·œμ •ν•œλ‹€ κ·ΈλŸ¬λ―€λ‘œ μƒλž΅ν•΄λ„ public μ ‘κ·Ό μ œν•œμžκ°€ λΆ™λŠ”λ‹€.

 

μ ‘κ·Όμ œμ–΄μž interface interfaceλͺ…{
  public static final λ³€μˆ˜λͺ…;
  public abstract λ©”μ„œλ“œ λͺ…;
}

2. μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ν•˜λŠ” 방법

interface Animal {
	public abstract void cry();
}

class Dog implements Animal{

	@Override
	public void cry() {
		// TODO Auto-generated method stub
	}
}

ν΄λž˜μŠ€μ—μ„œ implements ν‚€μ›Œλ“œλ₯Ό 톡해 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›λŠ”λ‹€. λ§Œμ•½ 상속받은 ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λͺ…μ„Έν•œ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ ν΄λž˜μŠ€λŠ” 좔상 ν΄λž˜μŠ€κ°€ λ˜μ–΄μ•Ό ν•œλ‹€.


3. μΈν„°νŽ˜μ΄μŠ€ 레퍼런슀λ₯Ό 톡해 κ΅¬ν˜„μ²΄λ₯Ό μ‚¬μš©ν•˜λŠ” 방법

package interfaceex;

public interface Calc {
    double PI = 3.14;//ν”„λ¦¬μ»΄νŒŒμΌ λ‹¨κ³„μ—μ„œ public static final μ œν•œμžκ°€ λΆ™κ²Œλ¨
    int ERROR = -999999;

    int add (int num1, int num2);
    int sbustract (int num1, int num2);
    int times (int num1, int num2);
    int divide (int num1, int num2);

    default void description(){
        System.out.println("μ •μˆ˜ 계산기λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.");
    }

}

계산기 κΈ°λŠ₯을 λͺ…μ„Έν•œ Calc μΈν„°νŽ˜μ΄μŠ€

package interfaceex;

public abstract class Calculator implements Calc {
    @Override
    public int add(int num1, int num2) {
        return 0;
    }

    @Override
    public int sbustract(int num1, int num2) {
        return 0;
    }

}

Caculatorν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€ Calcλ₯Ό μƒμ†λ°›μ•˜λ‹€. Calcμ—μ„œ μ •μ˜λœ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ CalculatorλŠ” 좔상 ν΄λž˜μŠ€κ°€ λ˜μ–΄μ•Ό ν•œλ‹€.

package interfaceex;

public class CompleteCalc extends Calculator{
    @Override
    public int times(int num1, int num2) {
        return num1 * num2;
    }

    @Override
    public int divide(int num1, int num2) {
        if(num2 == 0){
            return ERROR;
        }
        return num1 / num2;
    }

    public void showInfo(){
        System.out.println("λͺ¨λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.");
    }
    //μ˜¨μ „ν•˜κ²Œ κ΅¬ν˜„λœ ν΄λž˜μŠ€λŠ” CompleteCalc λΏμ΄μ–΄μ„œ μΈμŠ€ν„΄μŠ€ν™” κ°€λŠ₯
}

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ λ©”μ„œλ“œ 쀑 λ‚˜λ¨Έμ§€λ₯Ό CompleteCalcν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜μ˜€λ‹€.

 

ν…ŒμŠ€νŠΈ μ½”λ“œ

Calc calc = new CompleteCalc();
Calc calc = new CompleteCalc2();//μ˜ˆμ‹œλ‘œ CalcμΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 클래슀
  • Calc μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ 상속받은 μ—¬λŸ¬ 클래슀 νƒ€μž…μœΌλ‘œ μΈμŠ€ν„΄μŠ€ 생성이 κ°€λŠ₯ν•˜λ‹€.

 

Calc μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μΈμŠ€ν„΄μŠ€ 생성 μ‹œ  showInfo() λ©”μ„œλ“œλŠ” 선언이 λΆˆκ°€ν•˜λ‹€. λ§Œμ•½ μ—… μΊμŠ€νŒ…μœΌλ‘œ Calc νƒ€μž…μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό μ„ μ–Έ μ‹œ μœ„μ˜ showInfo() λ©”μ„œλ“œλŠ” Calc μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν–ˆμœΌλ―€λ‘œ 선언이 λΆˆκ°€ν•˜λ‹€.

package interfaceex;

public class CalcTest {
    public static void main(String[] args) {

        //Calc calc = new CompleteCalc();
        CompleteCalc calc = new CompleteCalc();
        int n1 = 10;
        int n2 = 2;

        System.out.println(calc.add(n1,n2));
        System.out.println(calc.sbustract(n1,n2));
        System.out.println(calc.times(n1,n2));
        System.out.println(calc.divide(n1,n2));


        calc.showInfo();
    
    }
}

 


4. μΈν„°νŽ˜μ΄μŠ€ 상속

μΈν„°νŽ˜μ΄μŠ€λΌλ¦¬ 상속이 κ°€λŠ₯ν•˜λ‹€.

interface I3{
	public void x();
}

interface I2 extends I3{
	public void z();
}

class B implements I2{
	public void x();
	public void z();
}

5. μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λ³Έ λ©”μ„œλ“œ ( Default Method ) - Java 8


6. μΈν„°νŽ˜μ΄μŠ€μ˜ static λ©”μ„œλ“œ  - Java 8

μΈμŠ€ν„΄μŠ€ 생성과 상관없이 μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œ


 7. μΈν„°νŽ˜μ΄μŠ€μ˜ private λ©”μ„œλ“œ - Java 9

μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ κ΅¬ν˜„ν•œ λ©”μ„œλ“œ

κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ ν•  수 μ—†μŒ

 


[μ°Έκ³ ]

opentutorials.org/course/1223/6063

패슀트캠퍼슀 - μžλ°” μ˜¬μΈμ› 패슀 

728x90
λ°˜μ‘ν˜•

'Language > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Thread - λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°  (0) 2021.01.22
μ˜ˆμ™Έμ²˜λ¦¬  (0) 2021.01.14
[ JAVA ] package  (0) 2021.01.01
[ JAVA ] 상속  (0) 2020.12.25
[ JAVA ] μΆ”μƒν΄λž˜μŠ€  (0) 2020.12.20