티스토리 뷰

[JAVA,C#,Python 코드 비교] 10. 상속과 interface

 

1. 상속

- 자식 클래스가 부모 클래스부터 상속을 받게 되면 부모 클래스의 필드와 메서드 물려받음

- 중복된 코드 줄일 수 있고, 유지보수 편리, 통일성, 다형성 구현 

 

 

* JAVA 

- extends를 사용해서 상속을 받을 수 있음  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Animal{
    public void AnimalMethod(){
        System.out.println("Animal");
    }
}
 
class Cow extends Animal{
    public void CowMethod() {
        System.out.println("UMMMM");
    }
}
 
 
class Cat extends Animal{
    public void CatMethod() {
        System.out.println("Meow~");
    }
}
 
 
class Dog extends Animal{
    public void DogMethod() {
        System.out.println("Wal~ ");
    }
}
 
 
public class AnimalClass {
 
    public static void main(String args[]){
 
        Animal animal = new Animal();
        Dog dog = new Dog();
        animal.AnimalMethod(); //Animal
        dog.AnimalMethod(); // Animal
        dog.DogMethod(); // Wal~ 
 
 
    }
 
}
cs

 

 

 

2. Interface 

 

 

* JAVA 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class CalculatorService{
    public int calculate(char calculation,  int num1, int num2){
        if(calculation == '+'){
            return num1+num2;
        }else if(calculation == '-'){
            return num1-num2;
        }else{
            throw new IllegalArgumentException("Unknown calculation"+calculation);
        }
    }
}
 
public class Server {
 
    public static void main(String[] args){
        CalculatorService calculatorService = new CalculatorService();
        int result = calculatorService.calculate('+',1,1);
        System.out.println(result);
 
    }
}
 
cs

- 이러한 코드를 가지고 JAVA CODE 테스트를 해버리면 유지보수가 힘들어진다.

- 더 좋은 코드는?  다음과 같은 코드이다.

- 이 코드가 왜 좋을까?

(1) Calculation 공통적인걸 interface로 주어 세부적인 것들을 각각 class 주게 되어 나중에 에러가 날 시에도 유지보수를 쉽게 만들어준다. 

((2) interface도 생성자로 만들어 다음고 같이 쓸 수 있다.

Calculation calculation = new Multiplication();

int result4 = calculation.calculate(2,3);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
interface Calculation{
    int calculate(int num1, int num2);
}
 
 
class Addition implements Calculation{
    @Override
    public int calculate(int num1, int num2) {
        return num1+num2;
    }
}
 
class Subtraction implements Calculation{
    @Override
    public int calculate(int num1, int num2) {
        return num1-num2;
    }
}
 
class Multiplication implements Calculation{
    @Override
    public int calculate(int num1, int num2) {
        return num1*num2;
    }
}
class Division implements Calculation{
    @Override
    public int calculate(int num1, int num2) {
        return num1/num2;
    }
}
 
 
 
class CalculatorService{
    private final Calculation calculation;
 
    public CalculatorService(final Calculation calculation) {
        this.calculation=calculation;
    }
    public int calculate(int num1, int num2){
        return calculation.calculate(num1,num2);
    }
 
}
 
public class Server {
 
    public static void main(String[] args){
        CalculatorService calculatorService = new CalculatorService(new Addition());
        int result = calculatorService.calculate(1,1);
        System.out.println(result);
 
 
        int result2 = calculatorService.calculate(3,4);
        System.out.println(result2);
 
        CalculatorService calculatorService2 = new CalculatorService(new Division());
        float result3 = calculatorService2.calculate(1,4);
        System.out.println(result3);
 
        Calculation calculation = new Multiplication();
        int result4 = calculation.calculate(2,3);
        System.out.println(result4);
 
 
    }
}
 
cs

 

 

 

 

 

 

cf) abstract 

 

 

<출처>

1. 유튜브 KevinTV 

2. JAVA 객체 지향 디자인패턴(정인상/채홍석 지음, 한빛미디어) 

 

 

  

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함