필드

박영준·2022년 11월 26일
0

Java

목록 보기
2/111

1. 정의

  • 객체의 데이터를 저장

  • 생성자와 메소드 전체에서 사용됨

  • 객체가 소멸되지 않는 한, 객체와 함께 존재 (필드는 변수가 아님!)

변수 vs 필드

  • 변수: 자신이 선언된 생성자 or 메소드 블록 내부에서만 사용 가능
  • 필드: 생성자, 모든 메소드에서 사용 가능

2. 객체에서의 필드

  • 객체의 필드는 크게 고유한 데이터, 상태 데이터, 객체 데이터로 분류

Tire클래스

public class Tire {
    public Tire() {}
}

Door클래스

public class Door {
    public Door() {}
}

Handle클래스

public class Handle {
    public Handle() {}
}

Car클래스

public class Car {

    //필드
    // 고유 데이터 영역
    String company; // 자동차 회사
    String model; 	// 자동차 모델
    String color; 	// 자동차 색상
    double price; 	// 자동차 가격

    // 상태 데이터 영역
    double speed;  	// 자동차 속도 , km/h
    char gear; 		// 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    // 객체 데이터 영역
    Tire tire;
    Door door;
    Handle handle;

	// 기본 생성자
    public Car() {} 

	// 메소드
    ...
}
  • 이런 식으로 클래스를 나눠서 사용할 수도 있다.

3. 분류 및 타입

// 클래스
public class Car {

    // 필드
    String company = "현대자동차";
    String model = "그랜저";
    int maxSpeed = 350;
    int speed;
}
  • 클래스 { } 중괄호 블록 내부면 어디든 가능

  • 단, 생성자와 메소드 { } 중괄호는 불가능

  • 타입: 기본 타입, 참조 타입(배열, 열거, 인터페이스) 모두 가능

  • 초기값: 생략될 수도 있음

1) 사용법

  • byte, short, 정수형의 int, 실수형의 double
    기본형이기 때문에 접미사를 붙이지 X

  • byte, short
    연산에 이용하기보다는 저장 목적인 경우가 많아
    Java 의 내장 변환모듈이 자동으로 형 변환시켜준다.

  • long 타입
    구분을 위해 100L 처럼, 리터럴 마지막에 접미사로 L을 붙인다

  • float, double

    • float의 리터럴에는 f, double의 리터럴에는 d가 붙는다.
    • 실수형은 2개 밖에 존재하지 않으므로, 접미사 f를 사용하면 접미사 d는 생략 가능 (충분히 구분 가능해지므로)

4. 필드 사용

클래스 내부에서 內

public class Car {

    //필드
    int speed;

    //생성자
    ...

    //메소드
    double brakePedal() {
    	speed = 0;
    	return speed;
	}
}
  • 그냥 같은 클래스 내부에 선언해둔 필드를 사용하면 끝.

클래스 외부에서 外

문법

public class Person {
    void method() {
		// Person 클래스에서 Car 클래스의 speed 필드값을 사용하기위해서는 먼저 Car 객체를 생성해야함
        // Car 객체 생성
        Car myCar = new Car();

        // 필드 사용
        // Car 객체의 speed 필드값을 60으로 변경
        myCar.speed = 60;
    }
}
  • 참조변수 myCar을 이용해서, 외부에서 객체 내부의 필드에 접근하여 사용 가능

    • 객체의 내부 필드에 접근하는 방법은 도트(.) 연산자를 사용
  • 클래스로부터 객체를 생성한 후, 필드를 사용해야 함 (객체에 필드가 소속되어 있으므로)

    • 필드값은 생성자, 메소드, 외부클래스(객체생성 후, 필드 사용한 경우) 에서 변경 가능

Car클래스

public class Car {
		
    String model = "Gv80";  // model 필드 값에 “Gv80” 초기값 주기
    String color; 		

    char gear; 		
    boolean lights = true;  // lights 필드 값에 true 초기값 주기

    Tire tire = new Tire();			// tire 필드 값에 new Tire() 초기값 주기
    Door door;

	// 생성자
    ...

    ...
}

Main클래스

public class Main {
    public static void main(String[] args) {
        Car car = new Car(); 		// 객체 생성(인스턴스화)

        // 초기값과 기본값 확인하기
        System.out.println("car.model = " + car.model); // 초기값 "Gv80"이 출력됩니다. -> 초기값이 출력됨
        System.out.println("car.color = " + car.color); // 기본값 null이 출력됩니다.
        System.out.println();

        System.out.println("car.gear = " + car.gear);  // 기본값 \u0000(공백)이 출력됩니다.
        System.out.println("car.lights = " + car.lights); // 초기값 true가 출력됩니다.  -> 초기값이 출력됨
        System.out.println();

        System.out.println("car.tire = " + car.tire); // 초기값 인스턴스의 주소가 출력됩니다.  -> 초기값이 출력됨
        System.out.println("car.door = " + car.door); // 기본값 null이 출력됩니다.
        System.out.println();

        // 필드 사용
        car.color = "blue"; 	// 필드 color에 "blue" 데이터를 저장
        car.lights = false; 	// 필드 lights에 false 데이터를 저장

        System.out.println("car.color = " + car.color); 	// 저장된 "blue" 데이터가 출력
        System.out.println("car.lights = " + car.lights); 	// 저장된 false 데이터가 출력
    }
}
  • 이렇게 Car 객체에 있는 필드에 접근해서 값을 변경할 수 있다.
profile
개발자로 거듭나기!

0개의 댓글