본문 바로가기
언어/JAVA

[TIL]20230620 - 상속과 다형성

by tjsdn9803 2023. 6. 21.

자바 강의 3주차는 대부분 객체지향파트에 대한 내용들이었다. 강의를 모두 듣고 난 뒤 계산기를 구현하는 과제가 있었다.

과제는 단계 별로 이루어졌는데

1단계는 단순 Calculator내에서 calculate메소드로 연산자와 계산할 숫자 두개를 입력 받아 연산자에 따라 계산하여 결과값을 리턴한다. 

2단계는 연산자별로 클래스(AddOperation, SubOperation ....)를 만든 뒤 각 클래스별로 그에 맞는 연산을 하여 값을 리턴하는calculate메소드를 작성한다. Calculate클래스는 생성자로 각각의 연산자별 클래스를 받아 필드를 초기화해주고 calculate메소드에 연산자와 계산할 두 숫자를 넣으면 연산자에 따라 그에 맞는 연산자클래스(AddOperation, SubOperation ....)의 calculate메소드를 호출하여 계산한다.

3단계는 연산클래스들을 AbstractOperation(추상 클래스)로 추상화 하고 Calculate클래스는 AbstractOperation클래스를 의존하게 코드를 변경한다.

이 과정에서 추상클래스로 조건이 제시되어있었지만 인터페이스로도 구현이 될까하여 AbstractOperation을 인터페이스로 선언 후 각각의 연산자 클래스가 인터페이스를 구현하는 형태로 바꾸어 보았더니 Calculate변경 없이도 추상클래스를 이용할때와 같이 계산할 수 있었다.

그래서 추상클래스와 인터페이스의 차이점이 무엇일까 궁금해져서 이에 대해 알아보기로 하였다.

우선 앞에서 다루었듯이 추상 클래스와 인터페이스의 공통점은 추상메소드를 선언하여 상속받거나 구현하는 클래스들이 메소드를 오버라이딩하여 다형성을 구현할 수 있다는것이다.

둘다 다형성을 구현할 수 있지만 추상클래스와 인터페이스에는 여러 차이점이 있다. 

1. 사용 용도

클래스가 추상클래스를 상속하면 부모 클래스를 포함하는 느낌이다. 곧 같아지는 느낌을 주기도 한다.

클래스가 인터페이스를 구현하면 할 수 있는의 느낌이 있다.

2. 다중상속

추상클래스는 상속(extends)을 통해 다형성을 구현하고 인터페이스는 구현(implements)을 통해 다형성을 구현한다.
여기서 상속은 다중상속을 지원하지 않지만 여러 인터페이스를 구현하는것은 가능하다.

3. 공통된 기능

만약 인터페이스를 여러 클래스가 구현하는데 어떤 기능에 대해서 모든 클래스가 같은 작동을 한다하더라도 모든 클래스에 같은 코드의 메소드를 오버라이딩해주어야한다.

만약 추상클래스라면 추상메소드가 아닌 일반적인 메소드를 선언하여 상속받으면 오버라이팅하지 않더라도 부모 클래스의 메소드를 사용할 수 있다.

 

 

'언어 > JAVA' 카테고리의 다른 글

[TIL]20230722 - 빌더 패턴  (0) 2023.07.24
[TIL]20230622 - 예외처리  (0) 2023.06.22
[TIL]20230615 - 스트림의 toList()가 없다  (2) 2023.06.16
[TIL]20230613 - HashSet 의 저장방법  (0) 2023.06.14
[JAVA]변수의 종류  (0) 2023.06.13