객체의 속성 : 필드
필드란
- 필드는 객체의 데이터를 저장하는 역할을 합니다.
- 객체의 필드는 크게 고유한 데이터, 상태 데이터, 객체 데이터로 분류할 수 있습니다.
- 이처럼 자동차 객체는 4개의 고유한 데이터와 3개의 상태 데이터 그리고 3개의 객체 데이터를 가질 수 있습니다.
- 이 3개의 객체 데이터를 자동차를 만들기 위한 부품 데이터라고 이해해도 좋습니다.
- 자동차 클래스
- 자동차 클래스를 만들어 보겠습니다.
- 일단 먼저 자동차를 만들기 위한 부품인 타이어, 차문, 핸들 클래스를 만들겠습니다.
- 부품 데이터
더보기
public class Tire { public Tire() {} }
public class Door { public Door() {} }
public class Handle { public Handle() {} }이어 클래스
- 부품 데이터
- 부품 데이터와 나머지 고유한 데이터, 상태 데이터를 포함한 자동차 클래스를 만들겠습니다.
- 자동차 클래스
-
더보기
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() {} // 기본 생성자 double gasPedal(double kmh) { speed = kmh; return speed; } double brakePedal() { speed = 0; return speed; } char changeGear(char type) { gear = type; return gear; } boolean onOffLights() { lights = !lights; return lights; } void horn() { System.out.println("빵빵"); } }
- 일단 먼저 자동차를 만들기 위한 부품인 타이어, 차문, 핸들 클래스를 만들겠습니다.
- 자동차 클래스를 만들어 보겠습니다.
- 객체의 필드는 크게 고유한 데이터, 상태 데이터, 객체 데이터로 분류할 수 있습니다.
필드의 초기값과 초기화
- 우리가 정의하여 선언한 클래스의 필드들은 기본적으로 초기값을 제공하지 않을 경우 객체가 생성될 때 자동으로 기본값으로 초기화됩니다.
- 초기값을 제공하는 방법은 ‘필드타입 필드명 = 값;’ 이렇게 직접 초기화 할 수 있습니다.
- String model = "Gv80";
- 초기값을 제공하는 방법은 ‘필드타입 필드명 = 값;’ 이렇게 직접 초기화 할 수 있습니다.
- 필드 타입별 기본값
데이터 타입 기본값 byte 0 char \u0000 (공백) short 0 int 0 long 0l float 0.0f double 0.0 boolean false 배열 null 클래스 null 인터페이스 null
필드 사용법
- 필드를 사용한다라는 의미는 필드의 값을 변경하거나 읽는 것을 의미합니다.
- 우리가 클래스에 필드를 정의하여 선언했다고 해서 바로 사용할 수 있는 것은 아닙니다.
- 클래스는 설계도일 뿐 실제로 필드의 데이터를 가지고 있는 것은 객체입니다.
- 따라서 객체를 생성한 후에 필드를 사용할 수 있습니다.
- 외부 접근
- Car car = new Car();
- 이렇게 객체를 생성했다면 우리는 참조변수 car를 이용하여 외부에서 객체 내부의 필드에 접근하여 사용할 수 있습니다.
- 이때 객체의 내부 필드에 접근하는 방법은 도트(.) 연산자를 사용하면 됩니다.
- car.color = "blue";
- Car car = new Car();
- 내부 접근
- 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체 내부 메서드에서도 내부 필드에 접근할 수 있습니다.
double brakePedal() { speed = 0; return speed; }
- 이처럼 brakePedal()메서드 내부에서 객체의 필드 speed를 바로 호출해서 사용할 수 있습니다.
- 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체 내부 메서드에서도 내부 필드에 접근할 수 있습니다.
예제
- 자동차 클래스
-
더보기
public class Car { String company; // 자동차 회사 String model = "Gv80"; // 자동차 모델 String color; // 자동차 색상 double price; // 자동차 가격 double speed; // 자동차 속도 , km/h char gear; // 기어의 상태, P,R,N,D boolean lights = true; // 자동차 조명의 상태 Tire tire = new Tire(); Door door; Handle handle; public Car() {} // 기본 생성자 double gasPedal(double kmh) { speed = kmh; return speed; } double brakePedal() { speed = 0; return speed; } char changeGear(char type) { gear = type; return gear; } boolean onOffLights() { lights = !lights; return lights; } void horn() { System.out.println("빵빵"); } }
- model 필드 값에 “Gv80” 초기값을 주겠습니다.
- lights 필드 값에 true 초기값을 주겠습니다.
- tire 필드 값에 new Tire()초기값을 주겠습니다.
- main 메서드에 사용하여 테스트 해보겠습니다.
- 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.speed = " + car.speed); // 기본값 0.0이 출력됩니다. 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.speed = 100; // 필드 speed에 100 데이터를 저장합니다. car.lights = false; // 필드 lights에 false 데이터를 저장합니다. System.out.println("car.color = " + car.color); // 저장된 "blue" 데이터가 출력됩니다. System.out.println("car.speed = " + car.speed); // 저장된 100.0 데이터가 출력됩니다. System.out.println("car.lights = " + car.lights); // 저장된 false 데이터가 출력됩니다. } }
'JAVA' 카테고리의 다른 글
[JAVA] - 접근제어자란? (0) | 2024.01.23 |
---|---|
[JAVA] - 클래스란 (0) | 2024.01.23 |
[JAVA] - 객체 생성과 참조형 변수 (0) | 2024.01.12 |
[JAVA] - 클래스 설계 (0) | 2024.01.12 |
[JAVA] - Enum 클래스란? (1) | 2024.01.11 |