[TIL] 1월 2일

yeon·2021년 1월 2일
0
post-custom-banner

예제로 배우는 스프링 입문 1강(인프런)

  • main메소드를 실행하여 애플리케이션 실행 가능
    • 자바 애플리케이션으로 해당 애플리케이션을 띄우기 전에 꼭 메이븐 패키징을 해야한다. ./mvnw package
    • 프런트 관련된 라이브러리를 생성하는 plugin이 동작을 해야 localhost에서 화면이 깨지지 않은 상태로 애플리케이션을 실행할 수 있다.
    • 위의 과정들을 거친 이후에는 자바 애플리케이션을 실행하고 종료하는 식으로 애플리케이션 동작 가능
  • spring petclinic 프로젝트를 clone 받아서 메이븐으로 빌드하고 인텔리제이로 읽어서 애플리케이션을 실행하는 방법
  • 콘솔창에서 java jar 를 실행하는 방법
  • intellij에서 petclinic 애플리케이션을 실행하는 방법

자바의 정석 ch7

6. 추상클래스(abstract class)

추상 클래스란?

  • 일반 클래스와 같이 멤버변수와 생성자를 갖고 있지만, 추상 메서드를 갖고 있는 클래스
  • 미완성 설계도
  • 추상 클래스로는 인스턴스 생성 불가능, 상속을 통해서 자손 클래스만 인스턴스 생성할 수 있다.
  • 일반 클래스와의 차이점은 단지 추상메서드를 포함하고 있는지 여부일 뿐임

추상 메서드(abstract method)

  • 선언부만 작성하고 구현부는 작성하지 않은 상태
  • 메서드의 내용이 상속받는 클래스에 따라서 달라질 수 있어서 구현부는 작성하지 않고, 주석을 달아서 어떤 기능을 수행하는지 적어준다.
  • 추상 클래스를 상속받은 자손 클래스는 추상 메서드 부분을 완성해야한다.
  • 자손 클래스에서도 모든 추상 메서드 부분을 완성하지 않을 경우 그 클래스도 추상 클래스가 된다.
  • abstract 리턴타입 메서드이름();
  • 추상 메서드는 필수 기능이라고 할 수 있다.
    • 추상 메서드를 완성하지 않으면 인스턴스를 생성할 수 없기 때문, 강제적인 기능
  • 일반 인스턴스 메서드 내부에서 추상메서드 호출 가능하다.

추상클래스의 작성

여러 클래스에 공통적으로 사용될 수 있는 클래스를 작성하기도 하고, 원래 있던 클래스들 중 공통적인 부분을 뽑아서 추상클래스로 만들기도 한다.

  • 추상화(애매) : 클래스간의 공통점을 찾아내서 조상 클래스로 만드는 것

    → 추상화된 코드는 구체화된 코드보다 유연하다, 변경에 유리

  • 구체화(명확, 구체적) : 상속을 통해 클래스 구현, 확장하는 것

  • 추상메서드의 목적

    • 자손 클래스에서 추상 메서드를 꼭 구현하도록 강요하기 위해서

    (예제 코드는 개인 노션에)

    • Unit 클래스에 있는 move() 가 추상 메서드로 선언된 이유는 Unit 클래스를 상속받아서 구현하는 클래스는 move()를 필수적으로 구현해야 한다는 의미이다.
    • Unit[ ] group = new Unit[3];
      • 처음에 이 코드 부분이 Unit 이 추상 클래스여서 인스턴스 생성이 불가능한데 실행 가능한 코드인가? 하는 의문이 들었다.
      • 생각을 해보니, Unit 타입의 배열을 생성하면 Unit의 인스턴스들이 요소로 대입되는 것이 아니라, 일단 null 로 저장이 되고, 그 밑에 코드에서 요소별로 자식 인스턴스를 대입해주기 때문에 문제가 없는 것이다.
    • for 문 안의 group[i].move()
      • Unit 타입의 참조변수로 추상 메서드를 호출하더라도, 참조변수의 타입에 관계없이 실제 가르키고 있는 인스턴스의 메서드가 호출된다.
      • 이 코드가 Unit 클래스의 추상메서드 move()를 호출한 것 같아 보이지만, 실제로는 Marine, Tank, Dropship 인스턴스의 메서드가 호출되는 것이다.

오늘 한 일

  • 예제로 배우는 스프링 입문 수강 한 뒤에 김영한님의 스프링 입문 강의도 들어보자
  • 예제로 배우는 스프링 입문 1강 수강 완료
  • 자바의 정석 ch7 추상클래스 유튜브강의 수강 완료
post-custom-banner

0개의 댓글