KOSTA

KOSTA 교육 (정적 필드, 정적 메소드, 정적 초기화, 상수 필드, final, 오버로딩, 오버라이딩, 상속)

코린이 연대기 2021. 2. 19. 15:31

배운 내용

 

  1. 정적필드, 정적 메소드, 정적 초기화, 상수 필드(static)
  2. 오버로딩(Overloading)
  3. 오버라이딩(Overriding)
  4. 상속(Extends)

1. 정적 필드, 정적 메소드, 정적 초기화, 상수 필드

정적필드는?

class생성시 변수를 static으로 해줌으로서 class의 변수가 되는 것

  • int a; 변수가 있을 때 static int a;라고 선언하면 class 내의 변수가 된다.
  • 정적필드는 클래스 이름으로 호출한다.
  • system.out.println (class이름. 정적필드이름);

 

정적 메소드는?

static을 사용하는 메소드이다.

  • 객체를 생성하지 않고 사용이 가능하다.
  • 호출은 system.out.println (class이름. 정적필드이름); 로 한다.

 

정적 초기화 블록은?

static 키워드가 붙은 블록이다.

  • class가 사용되기 전에 자바 가상 기계에 의해 단 한 번 호출된다.
  • 정적 필드의 초기값 설정에 주로 사용된다.
  • 일반 멤버변수를 사용하지 않는다. 이유는 class가 동작하면서 이미 static 메소드를 실행 시켰기 때문에 변수가 실행되지 않는다.

 

상수 필드는?

static과 final 키워드가 모두 붙은 필드이다.

  • 상수를 구할 땐 final을 반드시 호출을 해줘야한다.
  • final을 사용할 때에는 수정을 하면 안되는 요소가 있는 부분에 사용한다.

2. 오버로딩(Overloading)

오버로딩은?

상위 클래스의 메소드와 이름, return 값은 동일하지만, 매개변수만 다른 메소드를 만드는 것을 의미한다.

  • 메소드 이름은 같지만 메소드 내의 파라미터 타입 및 개수로 구분된다.
  • 정적필드는 클래스 이름으로 호출한다.
  • system.out.println (class이름. 정적필드이름);

 

  • 같은 메소드이지만 파라미터 안의 변수가 다르다.
  • 위의 same을 출력하면 int 값이 출력되고 밑의 same은 String 값이 출력된다.

3. 오버라이딩(Overriding)

오버라이딩은?

상속과 관련이 있으며 상위클래스에 존재하는 메소드를 하위클래스에서 필요에 맞게 수정하는 것을 말한다.

  • 자식 부모 관계에서 부모가 형변환을 한다.
  • object는 모든 데이터를 가질 수 있다.
  • 다형성을 표현한다.
  • 메소드의 이름, 매개변수, 리턴 타입이 같아야한다.

 

오버라이딩에 대한 예제는 상속과 함께 학습해보도록 하겠다.

 

4. 상속

상속은?

상속이란 상위class와 유사한 class를 만들어야하는 경우 사용한다.

  • extends 키워드를 사용하여 상속할 클래스 이름을 명시한다. Class CheckingAccount extends Account{ ~~~~~~~ }
  • 자식 class를 부모 class에 생성하면 부모도 동일하게 생성된다.
  • super함수를 사용하면 부모의 default 생성자를 생성한다.
  • super함수를 쓰는 이유는 ? 초기화할 내용이 부모에게 있기 때문이다

 

예제는 ‘비디오 대여'를 이용하여 공부해보자

 

  • 일반회원에 대한 변수를 생성한다.
  • 디폴트 생성자를 생성한다.
  • 생성자를 생성하는데 일반회원이 비디오를 빌렸기 때문에 비디오 class에서 객체를 가져와야한다.
  • private에 대한 set, get을 생성하고 회원 및 비디오 정보에 대한 출력문까지 생성한다.

 

  • 특별고객은 일반고객과 포인트밖에 차이가 없기 때문에 자식class로 생성해준다
  • 포인트를 추가 생성해야하기 때문에 추가로 변수를 생성해준다
  • 디폴트 생성자를 생성하고 생성자를 생성한다.
  • 여기서 중요한 부분은 super함수가 부모의 생성자라는 것을 파악하는 것이 중요하다.
  • set, get을 private이므로 생성하고 printPoint메소드를 생성하여 포인트를 출력할 수 있도록 만든다.
  • 오버라이딩의 경우 먼저 일반회원 class의 print 출력문을 특별회원class에 가져온다.

 

  • 비디오도 마찬가지로 변수, 디폴트, 생성자, get, set을 출력해준다.
  • 비디오는 어떤 결과를 도출할 수 없기 때문에 다른 클래스로 넘어가자.

 

  • 일반고객과 특별고객의 객체를 하나씩 생성하고 그에 맞는 파라미터 값삽입해준다.
  • 출력은 각 객체의 출력메소드를 실행시켜주면 각 클래스에 대한 값이 나온다.
  • 오버라이딩의 경우 배열을 이용하여 다향성을 구현하는데 부모class를 이용하여 배열을 만든다.
  • 배열은 하나의 데이터 타입으로 이루어져 있으므로 하나의 데이터 타입 밖에 사용할 수 없다.
  • 때문에 부모class를 이용하여 일반고객, 특별고객을 배열에 생성하고 for문을 이용하여 배열의 크기보다 작을 때 오버라이딩 했던 출력문을 출력해주면 된다.