• KTDS_자바&파이썬 웹애플리케이션전문가 양성과정교육_10일차(JAVA)

    2021. 8. 4.

    by. KAEY

    자바&파이썬 웹애플리케이션 전문가 양성과정 채용연계형 교육과정 10일차

    KT 자바교육 후기 (2021-07-22 ~ 2021-12-03) 

    코로나 4단계 거리두기로 인해, 2021-08-02 ~ 2021-08-06 비대면

    2021-08-04 미생에서 완생이 되기 까지. 어느 새, 2자릿 수로ㅎㅎ

    자바 템플릿 메서드, 자바 추상클래스, 자바 추상메소드, java final


    [오전]  

      이전 실습 문제 복기 및 복습, 해설

     

     

    추상클래스

      중괄호{}로 감싼 부분을 함수의 구현부(implementation)라고 합니다. 이 부분이 없는 걸 자바에서는 추상 메소드라고 합니다. 추상메소드는 다음과 같이 선언만 하며 abstract 예약어를 사용합니다. 그리고 {} 대신 ; 를 씁니다.

     

     

     

    abstract int add ( int x, int y );

     정리하자면, 자바에서 추상 메소드는 abstract 예약어를 사용하며 선언만 하는 메소드입니다. 추상클래스는 항상 추상 메소드를 포함합니다.

     

     

     

      Computer 클래스는 추상 클래스이며 이를 상속받은 두 클래스 중 DeskTop 클래스는 일반 클래스이고 NoteBook 클래스는 추상클래스 입니다.

      NoteBook 클래스를 상속받은 MyNoteBook 클래스도 일반 클래스 입니다. display()와 typing()은 추상 메소드이고, turnOn()과 turnOff()는 구현코드가 있는 메소드입니다.

     


    [오후]  

      추상클래스

    public abstract class Computer {
      public abstract void display();
      public abstract void typing();
      
      public void turnOn(){
        System.out.println("전원을 켭니다.");
      }
      
      public void turnOff(){
        System.out.println("전원을 끕니다.");
      }
    }

      display()와 typing()은 하위 클래스에 따라 구현이 달라질 수 있는 추상메소드입니다.

      그래서 Computer에서는 구현하지 않고, 이 두 메소드 구현에 대한 책임을 상속받는 클래스에 위임한다 라는 의미를 가집니다. 따라서 추상클래스를 상속받은 DeskTop과 NoteBook에서 실제로 구현하게 됩니다. 하위클래스마다 다르게 구현할 메소드는 추상 메소드로 선언해 두는 것입니다.

     

     

    public class DeskTop extends Computer{
      public void display() {
        System.out.println("DeskTop Display()");
      }
      
      public void typing() {
        System.out.println(“DeskTop Typing()”);
      }
    }
    public abstract class NoteBook extends Computer{
      public void display() {
        System.out.println("NoteBook Display()");
      }
    }

     NoteBook 에서는 typing()이 없기 때문에 구현이 다 되지 않았기 때문에, 추상 메소드로 변경해주는 abstract를 작성해놓아야 합니다.

     

     

     

    public class MyNoteBook extends NoteBook{
      public void typing() {
        System.out.println("MyNoteBook Typing()");
      }
    }

      따라서 이를 상속받는 MyNoteBook에서 타이핑을 구현하여 하위 클래스에서의 구현을 해놓습니다. 또한 여기서는 abstract를 작성할 필요가 없습니다. NoteBook에서 디스플레이가 구현되어 있기 때문입니다.

     

     

     

    public class ComputerTest {
      public static void main(String[] args) {
        Computer c1 = new Computer();
        Computer c2 = new DeskTop();
        Computer c3 = new NoteBook();
        Computer c4 = new MyNoteBook();
      }
    }

    Computer클래스와 NoteBook 클래스는 인스턴스로 생성할 수 없다고 나옵니다.

    추상클래스는 모든 메소드가 구현되지 않았기 때문입니다.

    생성할 수 없는 추상클래스는 상속을 하기 위해 만든 클래스입니다.

     

    어떤 클래스를 구현하고, 어떤 메소드를 구현하지 않고 추상 메소드로 남겨두는 걸까요?

    실제 하위클래스에서 내용을 각각 다르게 구현해야 한다면, 구현 내용을 추상 메소드로 남겨두고 하위 클래스에 구현을 위임합니다.

     


      추상클래스 실습 예제

      다음 링크에서 확인 가능합니다.

      >> JAVA_ 추상클래스를 통해 연결된 클래스 생성 (추상클래스, abstract) (tistory.com)

     

     


    템플릿 메소드의 역할은 메소드 실행 순서와 시나리오를 정의하는 것입니다.

    템플릿 메소드에서 호출하는 메소드가 추상 메소드라면 차종에 따라 구현 내용이 바뀔 수는 있습니다.

    템플릿 메소드는 시나리오를 정의한 메소드이므로 바뀔 수 없습니다.

    상속받은 하위 클래스에서 템플릿 메소드를 재정의하면 안된다는 것입니다.

    그래서 템플릿 메소드는 final 예약어를 사용해 선언해서 템플릿 메소드 재정의가 안된다고 구현하는 것입니다.

     

     


    final로 선언된 경우 다른 값을 대입할 수 없습니다. 자바 프로젝트를 진행할 때 여러 파일에서 공유해야 하는 상수 값은 한 파일에 모아 public static final로 선언하여 사용합니다.

    클래스를 final로 선언하면 상속할 수 없습니다. 상속을 하면 재정의가 가능한데, 원래 클래스가 가지고 있는 기능에 오류가 생길 수 있기 때문에 보안과 관련되어 있거나 기반 클래스가 변하면 안되는 경우에는 클래스를 final로 선언합니다.

     

     


      실습 예제, 게임 플레이어의 레벨에 따라 메소드를 차별적으로 제공하세요. (복잡함)

      >>다음에서 확인할 수 있다.

      >> JAVA_객체지향프로그래밍, 템플릿 메서드 응용 (게임 레벨) (tistory.com)

     

     


     

    댓글 (비로그인 댓글 허용하지 않습니다.)