AngelPlayer`s Diary

클래스

클래스

틀, 설계도의 의미

상태를 나타내는 필드(변수), 행동을 나타내는 메소드(함수)로 구성

 

 

인스턴스

클래스 사용을 위해서 만드는 클래스 타입의 객체

 

 

메소드

사용법 : 접근_제어자 반환_타입 메소드명(파라미터) { }

특정 기능을 수행하기 위한 명령문의 집합

하나의 메소드가 하나의 기능을 수행하도록 작성하는 것이 좋음

 

- 인스턴스 메소드 : static이 붙지 않는 메소드

- 클래스 메소드 : static이 앞에 붙음, 인스턴스 생성 없이 바로 사용 , 인스턴스 변수나 인스턴스 메소드를 사용하지 않음

 

 

필드

클래스에 포함된 변수

 

- 클래스 변수 : 클래스 영역의 변수 중 static 키워드를 가지는 변수, 클래스 간 공유

사용법 : 클래스명.변수명

- 인스턴스 변수 : 클래스 영역의 변수 중 static 키워드를 가지지 않는 변수

사용법 : 인스턴스명.변수명

- 지역 변수 : 메소드, 생성자 등에 위치한 변수

 

클래스 변수 및 인스턴스 변수는 초기화를 하지 않아도 자동으로 초기화

지역 변수는 초기화 하지 않으면 에러 발생

 

 

초기화 블록

변수의 초기화 시 사용함

생성자보다 먼저 호출됨

 

- 인스턴스 초기화 블록 : 생성자와 차이가 없기 때문에 거의 사용하지 않음

사용법 : { }

- 클래스 초기화 블록 : static이 붙는 경우, 클랫그 변수 초기화 수행 시 사용함

사용법 : static{ }

 

 

생성자

객체 생성 시 인스턴스 변수를 원하는 값으로 초기화

생성자의 이름은 클래스명과 동일해야 함

여러 개를 선언할 수 있음 == 메소드 오버로딩이 가능함

반환 타입은 생략함

모든 자바 클래스는 하나 이상의 생성자를 가지고 있어야 함

new 키워드로 객체 생성 시 자동으로 생성자를 호출함

Car(String modelName) { }

Car(String modelName, int modelYear) {
    this.modelName = modelName;
    this.modelYear = modelYear;
}

 

 

this 참조 변수

인스턴스가 자기 자신을 참조할 때 사용하는 변수

this는 자기 자신의 주소를 가지고 있음

인스턴스 메소드에서만 사용가능하며, 클래스 메소드에서는 사용 불가능

 

 

this() 메소드

생성자 내부에서만 사용 가능함 -> 같은 클래스의 다른 생성자 호출 시 사용함 -> 파라미터를 맞춰 줌

생성자 호출 코드는 반드시 생성자의 첫 줄에 작성해야 함

// 기본 생성자
public Car() {
    this(0, "제네시스", 2022); // 다른 생성자 호출
}

 

 

메소드 오버로딩

같은 이름의 메소드를 중복하여 정의하는 것

메소드 간 매개 변수의 개수나 타입이 서로 다름

다형성(polymorphism)을 구현하는 방법 중 하나

 

 

재귀 호출

메소드 내부에서 다시 메소드가 호출되는 것

 

 

클래스 사용법

클래스 선언

// 참조 변수 선언 -> 인스턴스 생성
Car myCar; // 참조 변수 선언
myCar = new Car(); // 인스턴스 생성

// 동시에 실행
Car myCar = new Car();

 

 

메소드 호출

사용법 : 인스턴스명.메소드명(파라미터);

 

 

 

제어자

패키지

클래스와 인터페이스의 집합

파일의 효율적 관리가 목적

패키지 내부에 다른 패키지를 포함할 수 있음

 

 

패키지 선언

package 패키지명;

 

 

import 사용

import 패키지명.클래스명;

import 시 *를 사용해도 하위 패키지 클래스까지 포함하는 것은 아님

 

 

제어자

클래스와 클래스 멤버 선언 시 부가적인 의미를 부여하는 키워드

접근 제어자는 하나만 사용가능

기타 제어자는 여러 개 동시에 사용 가능

 

 

접근 제어자

private : 외부에 직접 접근 불가, 클래스 내부에서만 접근 가능 -> 객체의 public 메소드를 통해서만 접근 가능

public : 외부에 공개, 해당 객체를 사용하는 프로그램 어디서나 사용 가능

default : 같은 패키지의 멤버들만 접근이 가능함

protected : 같은 패키지, 자식 클래스만 접근이 가능함

 

 

final 제어자

클래스에 사용 시, 해당 클래스는 다른 클래스가 상속 불가

메소드에 사용 시, 해당 메소드는 오버라이딩 불가

변수에 사용 시, 상수, 변하지 않는 값

 

 

static 제어자

변수 -> 클래스 변수로 만들어 줌

메소드 -> 클래스 메소드로 만들어 줌

블록 -> 초기화 블록 : 클래스 변수의 초기화 진행

사용법 : static { } 

 

프로그램 시작 시 최초 한 번 생성되고 초기화

인스턴스 생성 없이 바로 사용 가능

해당 클래스의 모든 인스턴스가 공유함

 

 

abstract 제어자

추상 메소드 : 선언부만 있고 구현부가 없는 메소드, 자식 클래스에서 오버라이딩해 사용하는 메소드

추상 메소드는 반드시 abstract 제어자를 붙여야 함

클래스 및 메소드에서 abstract 사용 가능

 

 

final과 abstract는 함께 사용이 불가능함

static과 abstract는 함께 사용이 불가능함

private와 abstract는 함께 사용이 불가능함

 

 

 

상속

기존의 클래스에 새로운 기능을 추가하거나 재정의하여 새로운 클래스를 만드는 것

기존 클래스 재활용

자식 클래스와 부모 클래스가 중복적으로 사용하는 멤버를 부모 클래스에 작성 시, 자식 클래스에서 작성할 필요 없음

 

 

자식 클래스

부모 클래스의 특성을 물려받아 새로 작성된 클래스

class 자식클래스명 extend 부모클래스명 { }

생성자와 초기화 블록은 상속되지 않음

 

 

super 키워드

부모 클래스로부터 상속받은 필드나 메소드를 참조하는데 사용

부모 클래스의 멤버와 자식 클래스의 멤버 이름이 동일한 경우 super 키워드를 붙여 부모 클래스 멤버를 지칭함

class Parent {
    int a = 10;
}

class Child extends Parent {
    int a = 20;

    void display() {
        System.out.println(a); // 20
        System.out.println(this.a); // 20
        System.out.println(super.a); // 10
    }
}

 

 

super() 메소드

사용법 : super():

부모 클래스의 생성자를 호출할 때 사용함

부모 클래스의 생성자 중, (파라미터가 없는)기본 생성자만을 호출함 -> 없으면 에러

 

 

메소드 오버라이딩

부모 클래스에서 정의된 메소드를 자식 클래스에 다시 정의하는 것 == 재정의

메소드의 선언부는 완전히 동일해야 함 (파라미터 등) -> 반환 타입은 바뀔 수 있음

 

 

오버로딩 : 새로운 메소드를 정의 (새로 씀)

오버라이딩 : 기존 메소드를 재정의 (다시 씀)

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band