객체란 세상에 존재하는 물체를 뜻하며 식별이 가능한 것을 의미
필드와 메서드로 정의하여 구현
인스턴스 : 클래스를 기반으로 객체화 시킨 것
클래스 이름 : 객체를 만들기 위한 설계도
만들려고 하는 설계도를 선언(클래스 선언)
객체가 가지고 있어야할 속성(필드) 정의 -> 변수 형태로 선언
객체를 생성하는 방식 정의(생성자(Constructor))
객체가 가지고 있어야할 행위(메서드) 정의
public class Car{}
// <필드 영역> String company; // 자동차 회사 String model; // 자동차 모델 String color; // 자동차 색 double price; // 자동차 가격 double speed; // 자동차 속도(km/h) char gear; // 기어 상태(P, R, N, D) boolean lights; // 자동차 조명 상태
String 타입의 company 변수 선언
String 타입의 model 변수 선언
String 타입의 color 변수 선언
double 타입의 price 변수 선언
double 타입의 speed 변수 선언
char 타입의 gear 변수 선언
boolean 타입의 lights 변수 선언
// <생성자 영역> public Car () { // 아무것도 없는 이 형태를 기본생성자라고 함 -> 생략 가능 }
생성자
// <메서드 영역> // gasPedal // input : km/h // output : speed double gasPedal(double kmh){ speed = kmh; return speed; // 매개변수인 kmh을 통해 매개값을 전달받아 자동차의 속성인 speed 필드에 해당 값을 저장 } // brakePedal // input : X // output : speed double brakePedal(){ speed = 0; return speed; // 메서드가 호출되면 자동차의 속성인 speed 필드의 값을 0으로 바꾼후 speed의 값을 반환 } // changeGear // input : gear(char 타입) // output : gear char changeGear(char type){ gear = type; return gear; // 매개변수인 type을 통해 매개값을 전달받아 메서드가 호출되면 자동차의 속성인 gear 필드에 해당 값을 저장 } // onOffLight // input : X // output : lights(boolean 타입) boolean onOffLight(){ lights = !lights; return lights; // 메서드가 호출되면 자동차의 속성인 lights의 현재 논리 값을 반전 시킨 후 lights의 값을 반환 } // horn // input : X // output : X void horn(){ // 반환 값이 없을 땐 void System.out.println("빵빵"); // 메서드가 호출되면 자동차의 경적소리인 “빵빵”이 출력 }
new Car();
package week03; public class Main { public static void main(String[] args) { Car car1 = new Car(); // 생성자를 호출하기 위해 new 키워드 사용(새로운 객체를 만드는 명령어) Car car2 = new Car(); System.out.println(car1); // week03.Car@682a0b20(car1이 가지고 있는 주소) 출력
package week03; public class Main { public static void main(String[] args) { Car[] carArray = new Car[3]; // 길이가 3인 배열 생성 Car car1 = new Car(); car1.changeGear('p'); carArray[0] = car1; Car car2 = new Car(); car2.changeGear('N'); carArray[1] = car2; Car car3 = new Car(); car3.changeGear('D'); carArray[2] = car3; for (Car car: carArray) { System.out.println("car.gear = " + car.gear); // P N D 출력 } } }
데이터를 저장하는 역핳
클래스에 필드를 정의하여 선언했다고 해서 바로 사용할 수 있는 것이 아니라 인스턴스화를 해야 사용 가능
클래스는 실체가 아닌 설계도!!! 잊지 말기!!!
String model = "Gv80"; boolean lights = true;
필드타입 필드명 = 값;
필드 타입별 기본값
데이터 타입 | 기본값 |
---|---|
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.color = "blue"; // 내부로 접근
외부 접근
내부 필드에 접근하기 위해서 도트(.) 연산자 사용
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(); // 인스턴스화 public Car () { // 아무것도 없는 이 형태를 기본생성자라고 함 -> 생략 가능 } // gasPedal // input : km/h // output : speed double gasPedal(double kmh) { speed = kmh; return speed; } // brakePedal // input : X // output : speed double brakePedal(){ speed = 0; // 내부 접근 return speed; } // changeGear // input : gear(char 타입) // output : gear char changeGear(char type){ gear = type; return gear; } // onOffLight // input : X // output : lights(boolean 타입) boolean onOffLight(){ lights = !lights; return lights; } // hom // input : X // output : X void horn(){ System.out.println("빵빵"); }
package week03; public class Main { public static void main(String[] args) { Car car = new Car(); // 객체 생성 // 초기값과 기본값 확인 : 초기값을 준 것은 그 값이 들어가고, 아닌 값은 default value가 set 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); // 초기값 : week03.Tire@5b480cf9(주소) System.out.println("car.door = " + car.door); // 기본값 : null // 필드 사용 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 } }
리턴타입 메서드명(매개변수, ...) { 실행할 코드 작성 }
메서드가 실행된 후 호출을 한 곳으로 값을 반환할 때 해당 값의 타입
반환할 값이 없을 떼는 void
double brakePedal() {...} // double 타입 반환 char changeGear(char type) {...} // char 타입 반환 boolean onOffLights() {...} // boolean 타입 반환 void horn() {...} // 반환할 값 없음
메서드를 메서드로 전달하려는 값을 받기 위해 사용되는 변수 즉, 호출할 때 매개체가 되는 변수
매개변수에 값을 전달하기 위해서는 순서와 타입에 맞춰 값을 넣어주면 됨
double gasPedal(double kmh, char type){ changeGear(type); // 가속도 페달을 밟으면 자동으로 기어가 변한다. speed = kmh; return speed; void carSpeeds(double ... speeds) { // 가변길이의 매개변수 선언 for(double v : speeds) { // … 을 사용하면 아래처럼 매개값을 , 로 구분하여 개수 상관없이 전달 가능 System.out.println("v = " + v); } }
double 타입의 kmh
char 타입의 type
double speed = car.gasPedal(100,'D'); System.out.println("speed = " + speed); // 100
car.carSpeeds(100, 80); // v = 100.0, v = 80.0 car.carSpeeds(110, 120, 150); // v = 110.0, v = 120.0, v = 150.0
(매개변수)
: 먀개변수를 올바르게 입력해야함double gasPedal(double kmh, char type){ changeGear(type); // 가속도 페달을 밟으면 자동으로 기어가 변한다. speed = kmh; return speed; }
package week03; public class Main { public static void main(String[] args) { Car car = new Car(); // 객체 생성 System.out.println("페달 밟기 전 car.gear = " + car.gear); // null // 메서드 호출 및 반환값 저장 double speed = car.gasPedal(100,'D'); // 빈환 값 저장 System.out.println("speed = " + speed); // 100 boolean lights = car.onOffLight(); System.out.println("lights = " + lights); // false System.out.println(); System.out.println("페달 밟은 후 car.gear = " + car.gear); // D } }