λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

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

by μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 20.
λ°˜μ‘ν˜•

β–Ά μΈν„°νŽ˜μ΄μŠ€

좔상 λ©”μ„œλ“œμ™€ μƒμˆ˜λ‘œλ§Œ 이루어진 것.

κ΅¬ν˜„λœ μ½”λ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— λ‹Ήμ—°νžˆ μΈν„°νŽ˜μ΄μŠ€λ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.

Calc μΈν„°νŽ˜μ΄μŠ€ λ§Œλ“€κΈ°

-μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έν•œ λ©”μ„œλ“œλŠ” λͺ¨λ‘ κ΅¬ν˜„ μ½”λ“œκ°€ μ—†λŠ” 좔상 λ©”μ„œλ“œ.

이듀 λ©”μ„œλ“œλŠ” public abstract μ˜ˆμ•½μ–΄λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 쓰지 μ•Šμ•„λ„ 컴파일 κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ 좔상 λ©”μ„œλ“œλ‘œ λ³€ν™˜λœλ‹€.

그리고 μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ‘ 컴파일 κ³Όμ •μ—μ„œ 값이 λ³€ν•˜μ§€ μ•ŠλŠ” μƒμˆ˜λ‘œ μžλ™ λ³€ν™˜λœλ‹€.

public static final μ˜ˆμ•½μ–΄λ₯Ό 쓰지 μ•Šμ•„λ„ 무쑰건 μƒμˆ˜λ‘œ μΈμ‹ν•œλ‹€.

​

​​

 

β–Ά ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ν•˜κΈ°

μ„ μ–Έν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν΄λž˜μŠ€κ°€ μ‚¬μš©ν•˜λŠ” 것을 'ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€'라고 ν‘œν˜„ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έν•œ κΈ°λŠ₯을 ν΄λž˜μŠ€κ°€ κ΅¬ν˜„ν•œλ‹€λŠ” 의미둜 implements μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ν•˜κΈ°

-좔상 λ©”μ„œλ“œ times( )와 divide( )λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 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 num1 / num2;
		else
			return Calc.ERROR;  // num2κ°€ 0, 즉 λ‚˜λˆ„λŠ” μˆ˜κ°€ 0인 κ²½μš°μ— λŒ€λΉ„ν•΄ 였λ₯˜ λ°˜ν™˜
	}
	
	@Override
	public int square(int num) {
		return num * num;
	}
	
	public void showInfo() {
		System.out.println("Calc μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.");  // CompleteCalcμ—μ„œ μΆ”κ°€λ‘œ κ΅¬ν˜„ν•œ λ©”μ„œλ“œ
	}
    
}

-아직 κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ times( )와 divide( ) 좔상 λ©”μ„œλ“œλ₯Ό 이 ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•œλ‹€.

 

package interfaceex;

public class CalculatorTest {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 5;  // μ—¬κΈ° 0을 λ„£μœΌλ©΄ divide 뢀뢄에 Calc.ERROR κ°€ 좜λ ₯됨.

		CompleteCalc calc = new CompleteCalc();
		System.out.println(calc.add(num1, num2));
		System.out.println(calc.substract(num1, num2));
		System.out.println(calc.times(num1, num2));
		System.out.println(calc.divide(num1, num2));
        System.out.println(calc.square(num1));

		calc.showInfo();
	}
    
}

-8행을 보면 ꡬ체적인 클래슀인 CompleteCalc 클래슀만 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μžˆλ‹€.

Calculator ν΄λž˜μŠ€λŠ” 좔상 ν΄λž˜μŠ€μ΄λ―€λ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†κ³ , Calc μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 λ©”μ„œλ“œλ‘œλ§Œ μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.

​

​

β˜…ν’€μ΄

Calculator ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ„ μ–Έν•œ 좔상 λ©”μ„œλ“œ 쀑 일뢀 λ©”μ„œλ“œλ§Œ κ΅¬ν˜„ν–ˆμœΌλ―€λ‘œ 좔상 ν΄λž˜μŠ€μ΄λ‹€.

그리고 이λ₯Ό 상속받은 CompleteCalc ν΄λž˜μŠ€λŠ” Calculator ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜μ§€ μ•Šμ€ λ‚˜λ¨Έμ§€ 좔상 λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜κ³  showInfo( ) λ©”μ„œλ“œλ₯Ό μΆ”κ°€λ‘œ κ΅¬ν˜„ν–ˆλ‹€.

​

​

μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ κ·Έ ν΄λž˜μŠ€λŠ” ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€ν˜•μœΌλ‘œ λ¬΅μ‹œμ  ν˜• λ³€ν™˜μ΄ 이루어지며, ν˜• λ³€ν™˜λ˜μ—ˆμ„ λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ„œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ„ μ–Έν•œ λ©”μ„œλ“œλΏμ΄λ‹€.

​

​

​

λ‚˜ 혼자 μ½”λ”©) Calc μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œ μΆ”κ°€ν•˜κΈ°

Calc μΈν„°νŽ˜μ΄μŠ€μ— int square(int num) λ©”μ„œλ“œλ₯Ό μΆ”κ°€λ‘œ μ„ μ–Έν•œλ‹€. square( ) λ©”μ„œλ“œλŠ” λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬λœ κ°’μ˜ μ œκ³±μ„ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€. μΈν„°νŽ˜μ΄μŠ€μ— λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜κ³  CompleteCalcμ—μ„œ κ΅¬ν˜„ν•œ ν›„ CompleteCalcTest ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄λ³΄λΌ.

package interfaceex;

public interface Calc {
	double PI = 3.14;
	int ERROR = -999999999;

	int add(int num1, int num2);

	int substract(int num1, int num2);

	int times(int num1, int num2);

	int divide(int num1, int num2)

    int square(int num);
}

 

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 num1 / num2;
		else
			return Calc.ERROR;
	}
	
	@Override
	public int square(int num) {
		return num * num;

	}
	
	public void showInfo() {
		System.out.println("Calc μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.");
	}
    
}

 

package interfaceex;

public class CalculatorTest {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 5;

		CompleteCalc calc = new CompleteCalc();
		System.out.println(calc.add(num1, num2));
		System.out.println(calc.substract(num1, num2));
		System.out.println(calc.times(num1, num2));
		System.out.println(calc.divide(num1, num2));
        System.out.println(calc.square(num1));
	}
    
}

<μ‹€ν–‰ κ²°κ³Ό>

​

λ°˜μ‘ν˜•

λŒ“κΈ€