이전 내용
[JAVA] 객체 생성 방법
이전에 만든 class Car로 객체를 만들어봅시다. [JAVA] 클래스 설계 방법 [JAVA] 클래스 설계 방법 클래스의 구성 필드(속성), 생성자(어떻게 만들 것인지). 메서드(행위)로 이루어짐 https://ittrue.tistory.co
dev-story93.tistory.com
필드(Field)란?
객체의 데이터를 저장하는 역할
- 크게 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("빵빵");
}
}
클래스 내에서도 하위객체를 가질 수 있다.
필드의 초기값과 초기화
지금 우리가 만든 코드는 선언만 하고 할당을 하지 않았다.
할당을 하지 않으면 아래와 같이 초기값을 가지고 있는다.
할당을 하게 된다면 할당된 값이 인스턴스화되어 객체생성이 된다.
- 필드 타입별 기본값
데이터 타입 기본값 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 = "green";
- Car car = new Car( );
- 내부접근 방법
- 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체 내부 메서드에서도 내부 필드에 접근할 수 있습니다.
- 같은 클래스 안에 내부의 메서드에서 호출해 사용가능하다.
double brakePedal() {
speed = 0;
return speed;
}
- 이처럼 brakePedal() 메서드 내부에서 객체의 필드 speed를 바로 호출해서 사용할 수 있습니다.
메서드(Method)란?
객체의 행위를 뜻하며 객체 간의 협력을 위해 사용(자동차와 타이어의
메서드의 행위를 정의하는 방법은 블록 중괄호{ } 내부에 실행할 행위를 정의하면 된다.
메서드 선언
리턴타입 메서드명(매개변수, ...) {
실행할 코드 작성
}
리턴타입
double brakePedal() {...} // double 타입 반환
char changeGear(char type) {...} // char 타입 반환
boolean onOffLights() {...} // boolean 타입 반환
void horn() {...} // 반환할 값 없음
리턴타입은 메서드가 실행되고 호출을 한 곳으로 값을 반환할 때 해당값의 타입을 말한다.
- return 리턴타입의 반환값;
- 주의할 점은 메서드에 리턴타입을 선언하여 반환값이 존재한다면 반드시! return문으로 해당하는 리턴타입의 반환값을 지정해야 한다.
- 반환할 값이 없을 땐 리턴타입에 void를 작성해야 한다.
- 반환값이 없으면 return문으로 작성할 필요가 없다.
- 메서드는 실행할 때 return문을 만나면 그대로 종료된다. 이를 이용해 void 타입일 때 return; 이렇게 return문을 작성하여 원하는 지점에서 종료시킬 수 있다.
매개변수
double gasPedal(double kmh, char type) {
speed = kmh;
return speed;
}
매개변수는 input부분에 해당된다.
- 메서드를 호출할 때 메서드로 전달하려는 값을 받기 위해 사용되는 변수 (매개체가 되는 변수)
- 위 코드의 매개변수는 (double kmh, char type)이다.
- 해당 매개변수의 값을 전달할 때는 항상 타입과 순서를 맞춰줘야 한다. (코드가 순서대로 인식하기 때문에)
- 전달하려는 값이 없으면 비워두면된다(생략가능 빈칸으로 두기)
- 가변길이의 매개변수도 선언가능하다. (...) 이 부분으로 가능
void carSpeeds(double ... speeds) {
for (double v : speeds) {
System.out.println("v = " + v);
}
}
가변길이의 매개변수를 사용하면 매개값이 몇 개든지 사용할 수 있다.
- carSpeeds(100, 80);
- carSpeeds(110, 120, 150);
메서드 호출방법
메서드의 블록내부에 작성된 코드를 실행한다.
메서드( ) 괄호 안에 매개변수 작성필요.
필드와 마찬가지로 인스턴스화하여 객체를 만들어야 사용가능하다.
호출방법을 코드로 봐보자
- 외부 접근 방법
- Car car = new Car();
- 이렇게 객체를 생성했다면 우리는 참조변수 car를 이용하여 외부에서 객체 내부의 메서드에 접근하여 호출할 수 있습니다.
- 이때 객체의 내부 메서드에 접근하는 방법은 도트(.) 연산자를 사용하면 됩니다.
- car.brakePedal();
- 또한 메서드가 매개변수를 가지고 있다면 반드시 호출할 때 매개변수의 순서와 타입에 맞게 매개값을 넣어줘야 합니다.
- car.gasPedal(100, 'D');
- Car car = new Car();
- 내부 접근 방법
- 도트 연산자를 사용하여 외부에서 객체 내부에 접근할 수 있을 뿐만 아니라 객체 내부 메서드에서도 내부 메서드에 접근하여 호출할 수 있습니다.
double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
- 이처럼 gasPedal(double kmh, char type) 메서드 내부에서 해당 객체의 changeGear(type); 메서드를 호출할 수 있습니다.
반환값 저장
메서드의 리턴타입을 선언하여 반환할 값이 있다면 변수를 사용하여 받을 수 있다. (왜냐 참조형 변수이기 때문에?)
반드시 리턴 타 입고 변수의 타입이 같거나 자동타입형 변환이 되어야 한다.
double speed = car.gasPedal(100, 'D');
- double 타입의 변수 speed를 사용하여 double gasPedal(double kmh, char type) 메서드의 double 타입의 반환값을 받아 저장할 수 있습니다.
여기까지 필드와 메서드의 호출방법에 대해 알아보았다.
다음은 메서드의 오버로딩과 매개변수에 대해 알아보자
'언어(language) > 자바(Java)' 카테고리의 다른 글
| [JAVA] 인스턴스 멤버와 클래스 멤버 (2) | 2023.10.19 |
|---|---|
| [JAVA] 메서드 오버로딩 println( ); , 기본형 참조형 매개변수 (0) | 2023.10.19 |
| [JAVA] 객체 생성 방법 (2) | 2023.10.18 |
| [JAVA] 클래스 설계 방법 (0) | 2023.10.18 |
| [JAVA] 객체지향 프로그래밍? (1) | 2023.10.18 |