[Java] 클래스 ②

kiteB·2021년 12월 29일
0

Java

목록 보기
9/35
post-thumbnail

[ 클래스의 구성 멤버 ]

자바에서 클래스는 멤버로 필드, 생성자, 메소드를 갖는다.
이 구성 멤버들은 생략되거나 복수 개가 작성될 수 있다.

1. 필드 ( Field )

필드는 클래스에 포함된 변수를 의미한다.


2. 생성자 ( Constructor )

생성자는 객체 생성 시 초기화를 담당한다.

  • new 연산자로 호출되는 특별한 중괄호 {} 블록이다.
  • 필드를 초기화하거나, 메소드를 호출하여 객체를 사용할 준비를 한다.
  • 생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어있으며 리턴 타입이 없다.

3. 메소드 ( Method )

메소드는 어떠한 특정 작업을 수행하기 위한 명령문의 집합이다.

  • 메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.
  • 메소드는 필드를 읽고 수정하는 역할도 하지만, 다른 객체를 생성해서 다양한 기능을 수행하기도 한다.
  • 메소드는 객체 간의 데이터 전달의 수단으로 사용된다. 외부로부터 매개값을 받을 수도 있고, 실행 후 어떤 값을 리턴할 수도 있다.

[ 필드 ]

필드는 다음과 같이 객체의 고유 데이터, 상태 정보, 부품 객체를 저장한다.

1. 필드의 구분

  • 클래스 변수(static variable): 클래스 영역에 위치한 변수 중 static 키워드를 가지는 변수
  • 인스턴스 변수(instance variable): 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수
  • 지역 변수(local variable): 메소드나 생성자 초기화 블록 내에 위치한 변수

예제

class Car {

    static int modelOutput;	//클래스 변수
    String modelName;		//인스턴스 변수
    
    void method() {
        int something = 10;	//지역 변수
    }
    
}
  • 클래스 변수와 인스턴스 변수는 초기화를 하지 않아도 변수의 타입에 맞게 자동으로 초기화된다.
  • 지역 변수는 사용하기 전에 초기화하지 않으면, 컴파일러 오류가 발생한다.

📌 클래스 변수, 인스턴스 변수, 지역 변수 비교

  • 클래스 변수는 인스턴스를 생성하지 않고도 바로 사용할 수 있기 때문에 공유 변수(shared variable)라고도 한다.
    • 이러한 클래스 변수는 해당 클래스의 모든 인스턴스가 공유해야 하는 값을 유지하기 위해 사용한다.
  • 인스턴스 변수인스턴스마다 가져야 하는 고유한 값을 유지하기 위해 사용한다.

📌 필드 타입별 기본 초기값


2. 필드 사용

1) 클래스 내부의 생성자나 메소드에서 사용할 경우

단순히 필드 이름으로 읽고 변경하면 된다.

2) 클래스 외부에서 사용할 경우

우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다.
→ 필드는 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문이다.

예제

//Car 클래스
public class Car {

    //필드
    int speed;
    
    //생성자
    Car() {
        speed = 0;
    }
    
    //메소드
    void method(...) {
        speed = 10;
    }
    
}
  • Car 클래스의 speed 필드는 생성자와 메소드에서 변경이 가능하다.
//Person 클래스
void method() {
    //Car 객체 생성
    Car myCar = new Car();
    
    //필드 사용
    myCar.speed = 60;
}
  • 외부 Person 클래스에서 Car 클래스의 speed 필드값을 사용하려면 Car 객체를 우선 생성해야 한다!

[ 참고자료 ]

이것이 자바다 책
http://tcpschool.com/java/java_class_component
http://tcpschool.com/java/java_member_field

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글