본문 바로가기

java

자바강의 9일차

1. 추상클래스 (abstract class)

     - 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다.

     - 즉, 완성되지 못한채로 남겨진 설계도를 말한다.

     - 미완성설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스를 생성할 수 없다.

     - 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. (확장)

     - 추상클래스는 새로운 클래스를 작성하는 데 있어서 바탕이 되는 클래스로써 중요한 의미를 가진다.

 

     - 만약, 같은 크기의 Tv라도 기능의 차이에 따라 여러 종류에 모델이 있지만 사실 이들의 설계도는 아마 90%정도 동일할 것이다. 서로 다른 여러개의 설계도를 따로 그리는 것보다 이들의 공통부분만을 그린 미완성 설계도를 만들어 놓고 이 미완성 설계도를 이용해서 각각의 설계도를 완성하는 것이 훨씬 효율적일것이다.

 

     - 추상클래스는 키워드 'abstract'를 붙이기만 하면 된다.

     - 이렇게 함으로써 이 클래스를 사용할 때 클래스 선언부의 abstract를 보고 이 클래스에는 추상메소드가 있으니 상속을 통해서 구현해야 한다는 것을 쉽게 알 수 있다.

          Ex) abstract class 클래스 이름 {}

 

   1-1) 추상메소드 (abstract method)

        - 선언부만 작성하고 구현부는 작성하지 않은채로 남겨둔 것이 추상메소드이다.

        - 즉, 설계를 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성메소드인것이다.

        - 메소드를 이와 같이 미완성 상태로 남겨놓은 이유는 메소드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 것이다.

        - 추상메소드 역시 메소드 앞에 키워드 abstract를 붙여주고 추상메소드는 구현부가 없으므로 괄호 {} 대신 문장ㅇ의 끝을 알리는 ; 을 적어준다.

 

   1-2) 추상클래스 작성

        - 여러 클래스에서 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 기존의 클래스의 공통적인 부분을 뽑아서 추상 클래스로 만들어 상속하는 경우도 있다.

        - 상속이 자손클래스를 만드는데 조상클래스를 사용하는것이라면, 반대로 추상화는 기존의 클래스의공통부분을 뽑아내서 조상클래스를 만드는 것이라고 할 수 있다.  

 

2. 인터페이스(interface)

    - 인터페이스는 일종의 추상클래스이다.

    - 인터페이스는 추상클래스처럼 추상메소드를 가지지만 추상클래스보다 추상화정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다.

    - 오직 추상메소드와 상수만을 멤버로 가질 수 있으며 그 외의 다른 어떠한 요소도 허용되지 않는다.

    - 추상클래스를 미완성설계도라고 한다면 인터페이스는 구현된 것이 아무것도 없고 밑그림만 그려져 있는 기본설계도라고 할 수 있다.

    - 인터페이스도 추상클래스처럼 불완전한 것이기 때문에 그 자체만으로 사용되기 보다는 다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다.

   

   2-1) 인터페이스의 작성

        - 인터페이스를 작성하는 것은 클래스를 작성하는 것과 같다.

        - 다만 키워드로 class 대신 interface를 사용한다는 것만 다르다.

        - 일반적인 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약사항이 있다.

       * 모든 멤버변수는 public static final 이어야 하며 이를 생략할 수 있다.

       * 모든 메소드는 public abstract 이어야 하며 이를 생략할 수 있다.

        - 인터페이스에 정의된 모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는 것이며 생략된 제어자는 JVM이 자동적으로 추가해 준다.

 

   2-2) 인터페이스 상속

        - 인터페이스는 인터페이스로만 상속받을 수 있으며 클래스와 달리 다중상속, 즉 여러개의 인터페이스로부터 상속받는 것이 가능하다.

 

   2-3) 인터페이스의 구현

        - 인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없으며 추상클래스가 상속을 통해 추상메소드를 완성하는 것처럼 인터페이스도 자신에게 정의된 추상메소드의 몸통을 만들어주는 클래스를 작성해야 하는데 그 방법은 추상클래스가 자신을 상속받는 클래스를 정의하는 것과 다르지 않다.

      * 다만 클래스를 확장한다는 의미의 extends를 사용 X

      * 인터페이스를 구현한다는 의미의 implements 키워드를 사용

      * 인터페이스의 이름은 주로 '~을 할 수 있는'의 의미의 'able'로 끝나는 것들이 많은데 그 이유는 어떠한 기능 또는 행위를 하는데 필요한 메소드를 제공한다는 의미를 강조하기 위해서다.

      * 또한 그 인터페이스를 구현한 클래스는 '~를 할 수 있는' 능력을 갖추었다는 의미이기도 하다.

      * 이름이 able로 끝나는 것은 인터페이스라도 추측할 수 있지만, 반드시 able로 끝나는 것은 아니다.

 

 

   2-4) 인터페이스를 이용한 다형성

       - 다형성에서 자손클래스의 인스턴스를 조상타입의 참조변수로 참조하는것이 가능하다는 걸 배웠다.

       - 인터페이스 역시 이를 구현한 클래스의 조상이라 할 수 있으므로 해당 인터페이스의 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있으며, 인터페이스 타입으로의 형변환도 가능하다.

       - 즉, 인터페이스는 메소드의 매개변수의 타입으로 사용될 수 있으며, 메소드의 리턴타입으로 인터페이스 타입을 지정하는 것도 가능하다.

      *리턴타입이 인터페이스라는 것은 메소드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 의미이다.

 

   2-5) 인터페이스의 장점

         ① 표준화가 가능하다.

           - 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음, 개발자에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다.

 

          ② 개발시간을 단축 시킬 수 있다.

            - 인터페이스가 작성되면 메소드를 호출하는 쪽과 동시에 다른 한쪽에서는 인터페이스를 구현하는 클래스를 작성하게 되면 인터페이스를 구현하는 클래스가 작성될때까지 기다리지 않고도 동시에 개발을 진행이 가능하다.

 

           ③ 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.

            - 서로 상속관계에 있지도 않고, 조상클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.

 

           ⑤ 독립적인 프로그래밍이 가능하다.

             - 인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다.

             - 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면 한 클래스의 변경이 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.

 

 

'java' 카테고리의 다른 글

자바강의 10일차  (0) 2024.01.23
자바강의 8일차  (0) 2024.01.15
자바강의 7일차  (0) 2024.01.14
자바강의 6일차  (1) 2024.01.13
자바강의 5일차  (0) 2024.01.10