>

TIL

JAVA - 클래스, 제어자, 인스턴스, final

ekdud 2024. 12. 16. 10:11

📑

     

    클래스

    클래스는 객체를 만들기 위한 설계도이다.

    (class명과 파일명이 같아야만 함.)

     

    클래스의 구성요소를 멤버라고 부름.

    멤버 - 속성을 표현하는 필드 & 기능을 나타내는 메서드.

    클래스는 생성된 객체의 필드를 초기화해주는 메소드인 생성자를 가짐.

    접근제어자 class 클래스이름 {
        접근제어자 필드1의타입 필드1의이름;
        접근제어자 필드2의타입 필드2의이름;
        ...
        접근제어자 메소드1의 원형
        접근제어자 메소드2의 원형
        ...
    };

     

    ◾ 필드(field)

    객체 내에 값을 저장할 멤버 변수.
    클래스 내에서 선언된 위치에 따라 클래스 변수, 인스턴스 변수, 지역변수로 구분.

     

    ◾ 메소드(method)

    함수. 객체의 행동을 구현.

     

    ◾ 생성자(constructor)

    클래스의 이름과 동일한 메서드.
    객체가 생성될 떄 자동으로 호출됨.
    객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메서드.

     

     

     

    제어자

    - 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다.

    - 접근제어자 : public, protected, default, private

    - 그 외 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp

    - 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.

    제어자 의미 클래스 멤버변수 메서드
    static 클래스의, 공통적인 - 인스턴스 생성 없이 사용 가능.
    모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다. 클래스가 메모리에 로드될 때 생성된다.
    인스턴스 생성 없이 호출 가능. 인스턴스 멤버들을 직접 사용할 수 없다.
    final 마지막의, 변경될 수 없는 확장될 수 없는 클래스. 다른 클래스의 조상이 될 수 없다. 변경할 수 없는 상수가 된다. 인스턴스 변수의 경우 생성자에서 초기화 할 수 있다. 변경 될 수 없는 메서드, 오버라이딩을 통해 재정의 될 수 없다.
    abstract 추상의, 미완성의 클래스 내에 추상메서드가 선언되어있음을 알림. - 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임을 알림.

     

    static은 프로그램이 실행될 때 메모리 영역에 할당되므로, 인스턴스 과정(객체생성)없이 모두가 접근할 수 있는 공유자원이다.
    모두가 접근할 수 있는 공유자원이기 때문에 static에는 this라는 개념이 존재하지 않는다.

     

     

     

    접근제어자

    - public : 접근 제한이 전혀 없다.
    - protected : 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근이 가능하다.
    - default : 같은 패키지 내에서만 접근이 가능하다. (접근제어자가 없는 형태)
    - private : 같은 클래스 내에서만 접근이 가능하다.

    // 사용가능한 접근 제어자
    - 클래스 : public(다른 패키지에서 인스턴스 생성 가능), default(동일 패키지의 클래스에만 인스턴스 생성 가능)
    - 메서드, 멤버변수 : public, protected, default, private
    - 지역변수 : 없음

     

    접근 제어자는 클래스 내부에 선언된 데이터를 보호하기 위해 사용한다.

    유효한 값은 유지하도록 접근을 제한하는 것을 데이터 감추기라고 하며, 캡슐화에 해당한다.

     

    생성자에 접근 제어자를 사용함으로 인스턴스의 생성을 제한할 수 있다.

    일반적으로 생성자의 접근 제어자는 클래스의 접근제어자와 일치한다.

     

     사용가능한 제어자
    - 클래스 : public, default, final, abstract
    - 메서드 : public, protected, default, private, final, abstract, static
    - 멤버변수 : public, protected, default, private, final, static
    - 지역변수 : final

     

    - 메서드에 static과 abstract를 함께 사용할 수 없다.

    - 클래스에 abstract와 final을 동시에 사용할 수 없다.

    - abstract메서드의 접근 제어자가 private일 수 없다.

    - 메서드에 private와 final을 같이 사용할 필요는 없다.

     

     

     

    인스턴스

    object(객체)는 instance를 포괄하는 의미로 설계도를 가지고 만들 대상이며 클래스의 복사본이다.

     

    선언된 클래스를 가지고 객체의 인스턴스를 생성할 수 있다.

    인스턴스는 클래스를 바탕으로 sw로 구현되는 실체이다. 실체화된 인스턴스는 메모리가 할당된다.

    *인스턴스화 : 객체의 특성/속성을 정의하여 실체로 만들어주는 것.

     

    클래스와 객체는 어떤 실체로 구현된 게 아니다. 인스턴스화를 해야 실체가 된다.

     

     

     

    final 클래스와 final 메서드

    final 필드: 수정불가 필드

    final 클래스: 부모로 사용 불가한 클래스

    final 메서드: 자식이 재정의(오버라이딩) 할 수 없는 메서드