Java 프로그래밍기초 230222 #9 제어자/접근제어자/참조변수의 형변환

김춘복·2023년 2월 21일
0

Java 공부

목록 보기
12/20
post-custom-banner

객체지향 Part.2 이어서

제어자

  • 제어자 : 클래스와 클래스의 멤버(변수,메서드)에 부가적인 의미를 부여한다.
    접근제어자와 그 외. 하나의 대상에 여러 제어자를 같이 사용 가능(접근제어자는 하나만)
    순서는 상관없지만 주로 접근제어자를 제일 왼쪽에 선언

static

: 클래스에 고정 전역적으로 쉽게 재사용하는 잘 변하지 않는 변수나 메서드를 사용할 때 주로 사용.

  • 멤버변수에 사용시
    : 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다.
    클래스변수는 인스턴스를 생성하지 않고도 사용 가능. 클래스가 메모리에 로드될 때 생성.

  • 메서드에 사용시
    : 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
    static 메서드 내에서는 인스턴스 멤버를 직접 사용할 수 없다.

final

: 변경될 수 없는 단 한 번만 할당할 수 있음.

  • 클래스에 사용시 (ex. String, Math 등..)
    : 변경될 수 없는 클래스. 확장할 수 없는 클래스가 된다. (다른 클래스의 조상이 될 수 없다.)

  • 메서드에 사용시
    : 변경될 수 없는 메서드. 오버라이딩을 통해 재정의될 수 없다.

  • 멤버변수, 지역변수에 사용시 : 변수 앞에 붙으면 값을 변경할 수 없는 상수가 된다.

  • final이 붙은 변수는 상수이기때문에 보통은 선언과 동시에 초기화.
    하지만 인스턴스 변수의 경우 생성자에 의해 초기화할 수 있다.

abstract

: 추상클래스, 추상메서드 구현시 사용.

  • 추상클래스 : 클래스 내에 추상메서드가 선언되어있음을 의미. 미완성 클래스라 객체생성 불가능. 상속으로 완성시키는 클래스.

  • 추상메서드 : 선언부만 작성하고 구현부는 작성하지 않음.


접근제어자

: 접근제어자 : 멤버변수, 멤버함수(메소드), 클래스에 사용되며 외부에서의 접근을 제한하는 역할(캡슐화)을 한다.

public : 접근 제한 x
protected : 같은 클래스, 같은 패키지, 자손 클래스에서 접근 가능
default : 같은 패키지 내에서만 접근 가능. 아무것도 선언 안하면 default
private : 같은 클래스 내에서만 접근 가능.

  • 접근제한이 될 경우 직접 접근이 불가능한 것이지 private 멤버변수를 사용하는 public 메소드가 있다면 그걸 통해 간접적으로 접근은 가능하다.

  • 사용가능한 제어자 조합

  • 주의해야하는 제어자 조합
    클래스에 abstract와 final 동시에 사용 불가. final 클래스는 상속 불가.
    메서드에 abstract과 static 동시에 사용 불가. static메서드는 추상메서드에 사용안됨.
    메서드에 abstract과 private 동시에 사용 불가. 자손 클래스에서 구현해야하므로.
    메서드에 private와 final 같이 사용할 필요는 x. 어차피 private은 오버라이딩 불가라 하나만 사용해도 충분.


캡슐화/다형성은 #4 OOP문서 참고.


참조변수의 형변환

: 기본형 변수처럼 참조변수도 형변환이 가능하다. 단, 상속관계에서만 형변환이 가능하다.
사용할 수 있는 멤버의 개수를 조절하는 것. 조상, 자손관계의 참조변수는 서로 형변환 가능.

Army ChoonA = new Army();
// 자손 인스턴스(Army)가 조상 인스턴스(People)로 형변환
People ChoonP = (People) ChoonA; // (People) 작은개념이 큰개념으로 가므로 조상클래스는 생략 가능! 

// 조상 인스턴스(People)가 자손 인스턴스(Army)로 형변환
Army ChoonB = (Army) ChoonP		// (Army) 큰개념이 작은개념으로 가므로 자손클래스는 생략 불가능!

instanceof

  • A(객체) instanceof B(클래스)로 A객체가 B클래스를 상속받았는지 확인 가능.
    주로 조건문에 사용된다. A는 참조변수 B는 타입(클래스명)
    참조변수 형변환 전에 가능여부를 확인하기 위해 사용. t/f값으로 반환한다.
    instanceof가 true일때 검사한 타입으로 형변환이 가능하다는 의미.

매개변수 다형성

: 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
메서드의 매개변수를 지정할 때 조상타입으로 지정하면 그 자손타입들을 매개변수로 쓸 수 있다.

여러종류의 객체를 배열로 다루기

  • 조상타입의 참조변수 배열을 사용하면, 공통의 조상을 가진 서로 다른 자손타입의 객채를 배열로 묶어서 다룰 수 있다.
    묶어서 다루고 싶은 객체들의 상속관계를 따져 가장 가까운 공통조상 클래스 타입의 참조변수 배열을 만들어 객체를 저장하면 된다.
profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글