Java 10일차..열거형과 추상Method(With StarCraft)

박상우·2022년 8월 2일
post-thumbnail

열거형

열거형(Enumeration)

  • 사용법 : [접근 제한자] enum [이름] {...}
  • 의의 : 어떠한 대상이 프로그램 실행 중에 더 이상 추가되거나 삭제되지 않으며 그 종류나 개수가 상당히 고정되어있다고 판단되면 열거형으로 만드는 것이 좋다. (스타의 종족, 로그인 결과 등등)
  • 명명법 : 열거형의 원소는 Upper Snake Case(전체 대문자, 단어간 구분은 언더스코어(_) 방식으로 명명하여 콤마로 구분하여 열거한다.
  • 사용이유 : 오류를 극한으로 줄일 수 있고 프로그램이 실행시 부터 종료시 까지 불변하는 것들은 열거형으로 만들어야 한다.


위의 사진과 같은 형식으로 클래스 생성시 enum을 클릭 후 Object나누는 것과 같이 콤마(,)로 구분한다.

추상 클래스 (Abstract Class)

추상클래스(Abstract Class)

  • 사용법 : [접근 제한자] abstract class [이름]{...}
  • 반드시 추상 메서드를 가져야 하는 것은 아니다. 주로 추상 메서드를 가질 때 클래스를 추상화 한다.
  • 추상 클래스는 일반적으로 개발자가 직접 객체화하지 못(안)한다.(가능은 하다.)

위의 사진에서 선언과 동시에 값 초기화 이말의 정확한 뜻을 알고 싶어서 구글링을 한 결과.

  • 전역변수와 지역변수에 의해서 차이가 발생 하였다.
    전역변수는 변수를 선언함과 동시에 그 타입에 맞는 최초값이 대입되지만 지역변수는 선언을 해주지 않으면 아무 값도 들어가지 않는다.

여기서 중요한 사실은 멤버변수를 상수로 지정할 경우 Setter를 통해서 값지정을 할 수 없다는 점도 유심히 봐야한다. 위에서 말한것 처럼 전역변수는 변수 선언시 값이 바로 초기화 되기때문에 사실상 그대로 사용하면 된다.

추상메서드(Abstract Method)

사용법 : [접근 제한자] abstract [반환타입]...

  • 메서드의 존재 자체만 명시하고 구현부의 구현을 본클래스를 상속 받는 자식 클래스에게 맡기기 위해 사용.
  • 단, 추상 메서드를 한 개 이상 가지는 클래스는 반드시 추상 클래스(Abstract Class)여야 한다.

추상 클래스를 왜 사용할까?
클래스간 분명하게 나누어진다면 좋겠지만 아쉽게도 개발에서는 각 클래스마다 필요한 부분이 반드시 있을 것이다. 이러한 것들을 충족시키기 위해 다중상속이 되지 않는 Java에서는 추상메서드를 지원한다.

instanceof

instanceof
(객체 instanceof 타입){ }
: 객체가 명시한 타입으로 형변환 될 수 있는가? 에 대한 boolean값을 반환한다.

위의 명시된 target은 Unit 타입의 객체이고 IFly 타입과 IAttackAir 타입으로 형변환이 되는가? 에대한 참/거짓 여부를 묻는 것이다.
풀어서 해석하면 target이 IFly와 !IAttackAir타입을 가지고 있냐 즉, 공격대상은 공중을 나는데 자기자신의 객체는 공중공격을 하지 못하는 타입이라면 "공격할 수 없다"라는 값이 출력된다.

interface

interface

  • 의의 : 클래스간 상속은 1:1이기 때문에(Java 기준) 어떠한 클래스에 속성을 부여하여 다형성을 보다 강화 시키고자 사용한다.
  • 명명법 : 대문자 + 파스칼 케이스(주로 형용사), 혹은 그냥 파스칼 케이스
  • 멤버 변수 :
    - 접근제한자는 반드시 public , 생략해도 public이며 기본적으로 생략한다.
    • 반드시 정적인 상수.
  • 멤버 메서드 :
    - 접근 제한자는 반드시 public -> 전역적으로 사용하기 위해서 이다.
    • 기본적으로 추상적(구현부를 가지지 않는다.) → 자식의 동적인 구현에 따라 이루어지게 하기 위해서 추상적이다.

변수 지정할때는 public static final
메서드 지정할때는 public abstract
이 두가지경우는 한몸이라고 보면 될것 같다.
(물론 인터페이스 안에서 생성될 경우에만 속한다.)

오늘의 KeyPoint

참고로 interface는 콤마(,)로 구분하여 여러개를 implements할 수있다.
명심할것.
Java는 정말정말 어렵다.
열심히 살자.

profile
백엔드 개발자가 되기 위한 여정

0개의 댓글