Java언어 스터디 Chapter6-2(필드)

최재하·2022년 11월 23일
0

필드란?

클래스의 필드란 클래스에 포함된 변수를 의미합니다.
자바에서 변수는 클래스 변수, 인스턴스 변수, 지역 변수 3가지가 있다. 이중 클래스 변수, 인스턴스 변수를 필드라고한다. 클래스 변수와 인스턴스 변수의 차이는 static유무로 구분할 수 있다.

  • 클래스 변수
    클래스 영역에 위치한 변수 중 static 키워드를 가지는 변수
    프로그램이 실행될 때 생성되고 프로그램이 종료될 때 삭제됩니다.
    단 한 번만 생성되고 객체 생성 없이 클래스명.변수명으로 접근할 수 있습니다.

  • 인스턴스 변수
    클래스 영역에 위치한 변수 중 static 키워드를 사용하지 않는 변수
    객체가 생성될 때생성되며 객체가 삭제될 때 같이 삭제됩니다.
    heap 메모리에 저장되며 각 객체의 정보를 저장하는데 사용되어 멤버 변수라고도 합니다.

  • 지역 변수
    메소드나 안에 선언된 변수
    메소드가 호출될 때 생성되고 메소드가 종료될 때 삭제됩니다.
    변수가 존재하는 블록에서만 사용할 수 있기 때문에 블록변수라고도 합니다.
    반드시 초기화하고 사용해야 합니다.

  public class Student {
    static int num = 10; // 클래스 변수
    String name; // 인스턴스 변수
    
    public void print() {
        String str; // 지역 변수
        str = num + name;
        System.out.println(str);
    }
    
    public static void main(String[] args) {
        Student std1 = new Student();
        std1.name = "홍길동";
        std1.print();
    }
  }
//출력결과 : 10홍길동

필드선언

필드선언은 클래스 중괄호{}블록 어디서든 할 수 있습니다. 하지만 생성자와 메소드 중괄호{}블록 내부에는 선언이 될 수 없습니다. 생성자와 메소드 블록 내부에 선언된 것은 모두 로컬 변수가 됩니다. 필드의 선언은 변수의 선언 형태와 비슷하다 그래서 클래스 멤버 변수라고 부르기도 하는데 될 수 있으면 필드라는 용어를 그대로 사용하는게 좋다고 합니다.

타입 필드 [ = 초기값];

타입에는 기본타입과 참조타입 모두 올 수 있습니다 필드의 초기값은 선언시 넣을 수도 있고 생략될 수도 있습니다.

String company = "현대자동차";
String maxSpeed = "300";
int productionYear;
int currentSpeed;

필드사용

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

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

    //Car 클래스
    
    //필드
    int speed;
    //생성자
    Car(){
    	speed = 0;// 값변경
    }
    //메소드
    void method(...){
    	speed = 10; //값변경
    }

    Car클래스의 speed필드는 생성자와 메소드에서 변경이 가능하다 사용방법은 변수와 동일하지만 변수는 자신이 선언된 생성자 또는 메소드 안에서만 사용할 수 있지만 필드는 모두 사용가능.

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

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

     //Person 클래스
    
    void method(){
    	 //Car 객체 생성
        Car myCar = new Car();
        //필드사용
        myCar.speed = 60; //값변경
    }

    외부 클래스인 Person에서는 Car클래스의 speed필드값을 사용하려면 다음과 같이 Car 객체를 우선 생성해줘야 Car클래스의 필드값을 사용할 수 있다.



필드랑 변수는 아직도 많이 헷갈립니다. 스터디를 진행하면서도 이부분은 다들 어려워 하셨던거 같습니다. 필드는 클래스에 포함된 변수. 클래스 변수, 인스턴스 변수, 지역 변수 이 세가지중에 클래스 변수, 인스턴스 변수가 필드에 해당하고, 지역 변수는 메소드 블록 내에서만 사용가능하므로 필드라고 하지는 않는거같습니다.
정확한건 아니지만 지금 당장은 이렇게 이해했습니다 앞으로 계속 공부해봐야할듯

0개의 댓글