검색결과 리스트
글
abstract class와 interface 차이점
(Difference between Abstract class and Interface in Java)
쉽게 말하면
abstract class
는조금 덜 답답한 친구
interface
는완전 답답한 친구
이 두 답답이들은
"항상 시원시원하게 말 잘하는 친구가 있어야만 하는 애들이다."
@interface
는 안외이지만, 짚고 넘어가면..
골뱅이가 붙은 걸로 알 수 있듯
"빙긍빙글 주변을 맴돌기만하고 적극적이지 않아서 하고픈 말이 뭔지 직접 스무고개하듯 털어봐야하는 그런 애다."
조금 쉽게 말하면
abstract class
는부분 구현
해야하는 Abstract Classinterface
는전부 구현
해야하는 Abstract Class
이 두 Class는 항상 상속(또는 구현)되어 사용된다.
이렇게 끝낼까?..
조금 더 말해 볼 수 있겠어?
자바의 꽃
이라 불리는 상속
에 밀접한 친구들인데 관심 갖고 더 알아보자!
실은 얼마전 질문을 받았는데..
얼마전 abstract와 interface의 차이점
에 대한 질문을 받았다.
제대로 답변 못하고 긴장한 나의 클래스 ㅋㅋㅋ.. 🤦♂️
나는 사실 20년된 우리집 현관문 암호를 모른다.. 그냥 현관문에 도착하면 손이 알아서 암호를 입력한다..
개발도 사실 어느정도 그런 부분이 있다고 생각한다. ㅎㅎ;;
하지만 모름지기 개발자라면 자신의 지식을 개념적으로도 잘 설명하고 다른이를 설득시킬 수 있어야 하지 않겠는가!?
따라서 개발자들은 정말 생각
도 코딩
도 설전
도 많이 해야하는 것 같다. 바쁘다. ㅋㅋ
그래도 이런것이 밸런스 좋게 이루어진다면 정말 즐겁다.
어쨌든 서두가 길었다..
어디 한번 하나씩 뜯어보고 개념적으로다가 Java를 더욱 파헤처 다 벗겨보자. +_+
어디 보자..
Java 1.8부터 interface
재밌는건 Java 1.8 부터는 우리가 알던 interface가 아니다..
interface안에 default 접근자의 method
를 구현하여 상속할 수 있게 되었다..................
또한 static method
구현이 가능하다.
이는 단점을 보완하기 위한 것이라한다. 여러모로 유연하면 좋다고 보는 사람도 있을 수 있고 또는 제한적인 게 좋을 사람도 있을 것이다.
interface를 여러 곳에서 사용하고 있는데 몇몇 method의 코드가 변함없이 공통된게 있기 마련일 수도 있는 상황이라는 게 있는 사람들한테는 아주 좋은 소식이었겠지.. ... 음..
차이점
1. 생성 (단독으로 Instance 불가)
-
abstract:
-
형식:
abstract class TestAbstractClass { ... }
-
static block 가능
abstract class TestAbstractClass { static { System.out.println("Static Block"); } }
-
initialization block 가능
abstract class TestAbstractClass { { System.out.println("Initialization Block"); } }
-
생성자 가능
abstract class TestAbstractClass { TestAbstractClass(int a){ this.a = a; System.out.println("Constructor"); } }
-
-
interface:
-
형식:
interface TestInterface { ... }
-
static block 불가
-
initialization block 불가
-
생성자 불가
-
2. 변수
-
abstract:
-
제어자 제약없음
abstract class TestAbstractClass { private int a = 5; String b = "No Modifier"; public static double c = 5.22153; protected long d = 999999999999L; }
-
-
interface:
-
제어자는 public static final로 자동처리됨
-
private, protected, transient, volatile 사용불가
interface TestInterface { String a = "Yamma"; //public static final String public String b = "Wemma"; //public static final String static public int c = 8282; //public static final int }
-
3. 메소드
-
abstract:
-
abstract method도 concrete method도 가능
-
제어자 제약없음
abstract class TestAbstractClass { //- Abstract method public abstract Integer testSomeMethod(); abstract Long testSameNameMethod(); //- Concrete method public static String testStaticMethod(String param1){ return param1 +"1"; } protected int testDefaultMethod1(int a, int b){ return a + b; } }
-
-
interface:
-
abstract method만 가능 (
But from Java 8 - concrete method도 가능
) -
제어자는 코드블럭이 없는 method는 public abstract로 자동처리됨
interface TestInterface1 { //- Abstract method Integer testSomeMethod(); Long testSameNameMethod(); //- Concrete method from Java 8 static String testStaticMethod(String param1){ return param1 +"1"; } default int testDefaultMethod1(int a, int b){ return a + b; } }
-
4. 상속 또는 구현
-
abstract:
extends
로 1개만 가능abstract class AA { //... }
class Some extends AA { //... }
-
interface:
implements
로 다중구현 가능interface A { //... }
interface B { //... }
class Some implements A, B { //... }
-
재밌게도 인터페이스는
다른 인터페이스를 다중 상속
할 수 있다.. 🤦♂️interface C extends A, B { //... }
class Some implements C { //... }
-
5. 재미로 보는 두 인도분의 영상
1) Mr. DURGA (억양이 알아 듣기 힘들지만.. )
https://www.youtube.com/watch?v=nNwZN3mOVcw
2) Selenium Express
https://www.youtube.com/watch?v=Ud0zfImgbYw
Reference - 참조
- [Java] 인터페이스: https://devbox.tistory.com/entry/Java-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
- TOP 6 difference between Abstract class and Interface in JAVA || Must know facts: https://www.youtube.com/watch?v=Ud0zfImgbYw
- INTERFACE IN JAVA 8 with REAL TIME code ||Why DEFAULT Method?[Explained]: https://www.youtube.com/watch?v=rjQ0XxcQlFw
- Why we need constructor inside an abstract class ? || Popular Java interview question: https://www.youtube.com/watch?v=jmxOsCGV120
- Difference between Interface and Absract Class: https://www.youtube.com/watch?v=nNwZN3mOVcw
'LANGUAGE > Java & Groovy ' 카테고리의 다른 글
[Java] Java version switcher on Windows - 자바 버전 자주 바꿀 때!? (0) | 2020.04.15 |
---|---|
[Groovy] GString VS "A"+"B" VS StringBuilder (문자열조합 속도비교) (0) | 2020.03.16 |
[Java] public static void main(String[] args) 갖고 놀기 🤹♂️ (2) | 2020.03.14 |
[Groovy] try-with-resources ...... withCloseable{} 으로 대체한다? (0) | 2019.08.19 |
[Java] try-with-resources (가독성 높이기) (0) | 2019.08.19 |