ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - 3
    study/java 2020. 7. 16. 19:00

    final keyword

    1. final

       (1) 기본형 변수 : 값 변경 불가. 초기값을 지정해주어야 함

       (2) 참조형 변수 : 한번 인스턴스를 생성하면 다른 인스턴스를 생성할 수 없음

       (3) 메소드 : 해당 메소드를 포함한 클래스를 상속받아도 final keyword가 사용된 메소드는 오버라이딩 금지

       (4) 클래스 : 해당 클래스를 누구도 상속 받을 수 없음

    2. finally

    try, catch 문에서 항상 마지막에 수행되는 블록

    3. finalize

    객체의 메모리를 반환하는 메소드. 실행하면 GC가 메모리를 반환

     

     

    Overriding vs Overloading

    Overriding

    부모의 메서드를 재정의.

    왜 사용 ? 자식 클래스에 맞게 메서드의 내용을 변경해야하는 경우에 사용한다.

     

    Overloading

    같은 이름의 메서드를 파라미터를 다르게 하여 정의

    왜 사용 ? 동일한 기능을 하는 메서드를 다양한 입력값을 받아서 실행하도록 하기 위해서

     

    접근 제어자

    - public : 외부의 모든 접근을 허락

    - private : 클래스 내의 접근만을 허락

    - protected : '부모-자식 관계'와 '같은 패키지 내'에서만 허락

    - default : 같은 패키지만 허락

     

    왜 사용 ?

    외부의 접근으로부터 데이터를 보호하거나 굳이 보여줄 필요가 없는 정보나 내부적으로만 사용되는 정보를 감추기 위해서 사용

     

    추상 클래스 vs 인터페이스

    차이점

    - 추상 클래스는 클래스 내에 추상 메소드가 하나 이상 포함되거나 abstract으로 정의된 경우, 인터페이스는 모든 메소드가 추상메소드인 경우(함수의 껍데기만 있는 뼈대의 의미)

    - 둘다 강제적으로 상속받게 하는데 추상 메소드만 강제 상속. 추상 클래스의 일반 메소드는 상속 강제 아님

     

    공통점

    - 자식 클래스들의 공통적인 기능을 묶어 정의한다는 의미를 가짐

     

     

    목표

    공통점

    차이점

    추상 클래스

    기능을 확장

    인스턴스 생성이 안됨

    - 기능을 확장하기 위해 사용

    - 추상 메소드와 일반 메소드 모두 정의 가능

    - 단일 상속만

    인터페이스

    기능을 구현

    (구현 객체가 같은 동작을 한다는 것을 보장)

    - 기능을 구현하기 위해 사용

    - 추상 메소드와 디폴트 메소드로 정의가 가능

    - 다중 상속 가능

     

    디폴트 메서드

     : 인터페이스에서 메서드앞에 default 키워드를 사용하게 되면  인터페이스 내부에서도 코드가 포함된 메서드를 선언할 수 있다.

    접근제어자의 default는 아무것도 명시하지 않으면 되고 인터페이스의 default는 default를 명시해주어야 한다.

     

    왜 사용?

    기존에 존재하던 인터페이스에 새로운 내용을 추가하거나 기존의 내용을 변경하게 되면 그 인터페이스를 구현하는 클래스들에 지장을 주게 된다. default 메서드를 사용하면 클래스들과의 호환성을 유지시키면서 인터페이스를 변경할 수 있다.

     

     

    인터페이스를 사용하는 이유 ( 장점 )

    1. 개발 시간 단축

    개발자들이 각각의 부분을 완성할 때까지 기다리지 않고 서로 규약을 정해놓고 각자의 부분만 따로 나누어 작성된 코드를 컴파일할 수 있음

    2. 표준화 가능

    클래스의 기본틀을 제공하여 개발자들이 정형화된 개발을 할 수 있도록 함

    3. 서로 관계없는 클래스간에 관계를 맺어줄 수 있음

    코드의 중복성을 줄이고 유지보수성을 높여서 클래스 간의 쓸데없는 상속을 방지

    4. 독립적인 프로그래밍 가능

    두 클래스가 같은 인터페이스를 구현하고 있을 때 한 클래스를 변경하여도 나머지 한 클래스에 영향을 미치지 않음

     

     

    추상 클래스와 인터페이스의 적절한 사용 케이스

    추상클래스

    - 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우

    - 추상 클래스를 상속받은 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근 제어자 사용이 필요한 경우

    - non-static, non-final 필드 선언이 필요한 경우. 즉 각 인스턴스에서 상태 변경을 위한 메소드를 선언할 수 있음

     

    인터페이스

    - 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용. 예를 들어 Comparable, Cloneable 인터페이스는 여러 클래스에서 구현되는데 구현 클래스들 간에 관련성이 없는 경우가 대부분.

    - 특정 데이터 타입의 행동을 명시하고 싶은데 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우

    - 다중 상속을 허용하고 싶은 경우

     

    추상클래스의 추상메소드와 일반 메소드

    공통적인 기능 -> 슈퍼클래스(추상클래스)의 일반 함수로 구현

    개별 기능/ 슈퍼클래스로도 동작이 가능한 기능 -> 슈퍼클래스의 추상함수 ( 서브 클래스에서 구현 )

    서브 클래스만의 기능 -> 서브 클래스의 일반 함수로 구현

     

    ※ 클래스 다중 상속이 안되는 이유는?

    다중 상속이 가능하면 충돌이 생긴다.

    예를 들어 run() 이라는 메소드를 가지고 있는 A클래스와 B클래스를 다중 상속받은 C 클래스가 있다고 가정하자.

    C클래스 입장에서 A 클래스의 run() 메소드를 오버라이드할지, B 클래스의 run()메소드를 오버라이드할지 충돌이 발생하게 된다.

     

    추상메소드와 인터페이스 관련 잘읽히는 블로그

    https://velog.io/@lshjh4848/%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-bok2k2qjrg

     

    추상클래스와 인터페이스

    추상클래스와 인터페이스에 대한 설명입니다.

    velog.io

     

     

     

    'study > java' 카테고리의 다른 글

    [JAVA] Try-with-resources  (0) 2020.07.30
    JAVA - 5  (0) 2020.07.20
    JAVA - 4 ( 객체지향 )  (0) 2020.07.16
    JAVA - 2 (변수타입과 컬렉션)  (0) 2020.07.15
    JAVA - 1 ( JAVA 기초 )  (0) 2020.07.13
Designed by Tistory.