[TIL] 플레이데이터 인공지능 24기 DAY 94

황예빈·2022년 12월 11일
0

플레이데이터 TIL

목록 보기
9/21
post-thumbnail

🛠️활용제어자

final: final -상수(변할 수 없는 값이 된다)
필드/지역변수, 메서드, 클래스에 붙을 수 있음

abstract: 추상적인(완전하지 않은) 이라는 뜻으로 반드시 부모클래스를 상속받아서만 쓸 수 있다. 메서드나 클래스 앞에 붙는다

static :static으로 지시된 특정한 멤버가 해당 클래스의 인스턴스가 아니라
클래스 자체에 속해 있음을 나타내는 자바 키워드다.
필드,메서드,클래스

만들어 놓고 클래스 호출, 객체 생성을 따로 할 필요없이 바로바로 사용할 수 있기 때문에 사용성이 좋다.

재사용하는 멤버나 잘 변하지 않는 변수나, 메소드를 사용할때 주로 사용한다.

하지만 static 메모리 자원을 할당해놓고 사용하는 것이라

너무 많이 사용한다면 메모리를 많이 차지하게 되어서 프로그램이 무거워진다.


저번시간에 상속과 접근 제어자, 활용 제어자에 대해서 배웠다.
오늘은 활용제어자의 자세한 쓰임과 추상클래스, 인터페이스에 대해서 알아보았다.

추상 클래스

abstract 제어자

: abstract가 붙은 메서드와 클래스를 각각 추상 메서드, 추상 클래스라고 한다.

  1. 추상(미완성) 메소드 : 선언부만 있는 메소드(몸체가 없는 메소드)

  2. 추상(미완성) 클래스 : 개념이 미완성된 클래스
    ✅특징

  • 인스턴스 생성 불가, 타입으로는 사용가능
  • 추상메소드를 하나라도 가지고 있으면 추상클래스여야 한다.
  • 중괄호가 {} 생략. ; 세미콜론으로 마무리 짓는다.
    ---------> 아직 무슨 기능을 정의할지 정해지지 않은 미완성 메서드
public abstract class MyObject{
      public  abstract void printName();
//아직 코드블럭을 가지고 있지 않은 추상적인 상태
}
  • 추상 클래스는 무조건 상속을 해서 메소드 오버라이딩을 해야한다.

  • 추상클래스는 객체 생성이 불가능함!!

---------> 아무런 기능을 수행하지 않는, 즉 중괄호를 비워두는 메서드 정의할 때는 abstract 미완성 메서드로 정의하는 것이 효율적이다.

✅장점

메서드를 오버라이딩하는 과정에서 메서드명이 만약 오타가 날 경우,일반 메서드는 이를 새로운 1개의 메서드가 더 생성되었다고 본다.

하지만 abstract 메서드는
오버라이딩할 때 메서드명 오타가 일어났을 때 문법적 오류로 나타난다. 이클립스 같은 툴에서는 자동으로 오버라이딩 해주기도 함(편리)

-->

오타가 일어나면 이를 못 읽어내니 문법오류로 알린다.
보통, 다른 개발자나 다른 회사가 각각 다른 클래스를 작성할 때 사용. 실수를 막아준다.

인터페이스

인터페이스 만들기
인터페이스: 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시스템 (협업에 도움됨)
인터페이스 정의하는 방법

추상 메소드와 상수를 정의 할 수 있다.

    public interface TV{
        public int MAX_VOLUME = 100;
        public int MIN_VOLUME = 0;

        public void turnOn();
        public void turnOff();
        public void changeVolume(int volume);
        public void changeChannel(int channel);
    }

인터페이스에서 변수를 선언하면 컴파일시 자동으로 아래와 같이 바뀐다.

    public static final int MAX_VOLUME = 100;
    public static final int MIN_VOLUME = 0;
    

즉, 인터페이스에서 선언한 변수는 모두 static한 상수이고, 다른 값으로 바뀔 수 없다.

인터페이스에서 정의된 메소드는 모두 추상 메소드이다. 위에서 선언된 모든 메소드는 컴파일 시에 다음과 같이 자동으로 변경된다.


  public abstract void on();
   public abstract void off();
   public abstract void volume(int value);
   public abstract void channel(int number);

인터페이스 사용하기

인터페이스 사용하는 방법
인터페이스는 사용할때 해당 인터페이스를 구현하는 클래스에서 implements 키워드를 이용한다.

public class LedTV implements TV{
        public void on(){
            System.out.println("켜다");
        }
        public void off(){
            System.out.println("끄다");   
        }
        public void volume(int value){
            System.out.println(value + "로 볼륨조정하다.");  
        }
        public void channel(int number){
            System.out.println(number + "로 채널조정하다.");         
        }
    }

인터페이스가 가지고 있는 메소드를 하나라도 구현하지 않는다면 해당 클래스는 추상클래스가 된다!!
(추상클래스는 인스턴스를 만들 수 없음)

    public class LedTVExam{
        public static void main(String args[]){
            TV tv = new LedTV();
            tv.on();
            tv.volume(50);
            tv.channel(6);
            tv.off();
        }
    }

참조변수의 타입으로 인터페이스를 사용할 수 있다. 이 경우 인터페이스가 가지고 있는 메소드만 사용할 수 있다.
인터페이스가 가지고있는 메소드 이외에 추가적으로 메소드를 더 구현하였다면 클래스의 형변환을 통해 추가 메소드를 더 사용할 수도 있다.

만약 TV인터페이스를 구현하는 LcdTV를 만들었다면 위의 코드에서 new LedTV부분만 new LcdTV로 변경해도 똑같이 프로그램이 동작할 것다. 동일한 인터페이스를 구현한다는 것은 클래스 사용법이 같다는 것을 의미한다.
클래스는 이러한 인터페이스를 여러개 구현할 수 있다.

                                           
profile
Lv. 23

0개의 댓글