[자바(Java)] 클래스 (Class)

방용환·2023년 4월 6일
0
post-thumbnail

1. 클래스 (Class)

1. 클래스 (Class)?

  • 클래스 (Class) : 객체(Object)를 생성하기 위한 자료형 (참조형)
  • Java에서는 객체(Object) 대신 인스턴스(Instance)라는 용어 사용
  • 현실에 존재하는 사물 또는 관념을 클래스라는 자료형으로 표현하여 프로그램에 동작될 수 있도록 객체로 생성하여 사용

2. 클래스 선언

[public] class 클래스명 {
	필드 (Field);
    필드 (Field);
         ፧
    생성자 (Constructor)
    생성자 (Constructor)
         ፧
    메소드 (Method)
    메소드 (Method)}
  • 필드 (Field) : 표현 대상의 속성값을 저장하기 위한 변수
  • 생성자 (Constructor) : 클래스로 객체를 생성하기 위한 특별한 메소드
    => 생성자를 선언하지 않으면 매개변수가 없는 기본 생성자(default constructor)가 자동으로 생성되어 제공
  • 메소드 (Method) : 표현 대상의 행위를 명령으로 제공하기 위한 함수
    => 메소드는 필드를 사용한 명령으로 필요한 기능이 제공되도록 작성
    => 클래스 내부에 선언된 모든 메소드는 필드 접근 가능

3. 클래스로 객체 생성

클래스명 참조변수 = new 클래스명();

// 참조변수.필드명 : 참조변수에 저장된 객체가 '.'연산자를 사용하여 필드에 접근
  1. new 연산자로 클래스의 기본 생성자를 호출하여 객체를 생성하고 생성된 객체의 메모리 주소를 참조변수에 저장
  2. 참조변수에 저장된 객체는 '.'연산자를 사용하여 필드 또는 메소드를 이용해 프로그램을 작성
  3. 하나의 클래스로 서로 다른 객체를 여러개 생성 가능
  4. 클래스는 객체를 생성하기 위한 틀 (Template)
  5. 객체를 생성하면 객체의 필드에서는 기본값이 초기값으로 자동 저장

2. 클래스 예제

  1. Car.java
// Car.java

public class Car {
	// 필드(Field) : 클래스 내부에 선언된 모든 메소드는 필드 접근 가능
	String modelName;// 모델명
	boolean engineStatus;// 엔진상태 - false : EngineOff, true : EngineOn
	int currentSpeed;// 현재속도

	// 생성자(Constructor) : 생성자를 선언하지 않으면 매개변수가 없는 기본 생성자(Default
	// Constructor)가 자동으로 생성되어 제공

	// 메소드(Method) : 필드를 사용하여 메소드의 명령으로 필요한 기능을 제공되도록 작성
	void startEngine() {// 시동 온(On)
		engineStatus = true;
		System.out.println(modelName + "의 자동차 시동을 켰습니다.");
	}

	void stopEngine() {// 시동 오프(Off)
		if (currentSpeed != 0) {// 자동차가 멈췄있지 않은 상태인 경우

			// 클래스 내부에 선언된 메소드는 서로 호출 가능
			// => 코드의 중복성을 최소화 하여 프로그램의 생산성 및 유지보수의 효율성 증가
			speedZero();
		}

		engineStatus = false;
		System.out.println(modelName + "의 자동차 시동을 껐습니다.");
	}

	void speedUp(int speed) {// 속도 증가
		if (!engineStatus) {// 엔진이 꺼져 있는 경우
			System.out.println(modelName + "의 자동차 시동이 꺼져 있습니다.");
			return;// 메소드 종료
		}

		if (currentSpeed + speed > 150) {
			speed = 150 - currentSpeed;
		}

		currentSpeed += speed;
		System.out.println(modelName + "의 자동차 속도가 " + speed + "Km/h 증가 되었습니다. 현재 속도는 " + currentSpeed + "Km/h 입니다.");
	}

	void speedDown(int speed) {// 속도 감소
		if (!engineStatus) {// 엔진이 꺼져 있는 경우
			System.out.println(modelName + "의 자동차 시동이 꺼져 있습니다.");
			return;// 메소드 종료
		}

		if (currentSpeed < speed) {
			speed = currentSpeed;
		}

		currentSpeed -= speed;
		System.out.println(modelName + "의 자동차 속도가 " + speed + "Km/h 감소 되었습니다. 현재 속도는 " + currentSpeed + "Km/h 입니다.");
	}

	void speedZero() {// 이동 중지
		currentSpeed = 0;
		System.out.println(modelName + "의 자동차가 멈췄습니다.");
	}
}
  1. CarApp.java
// CarApp.java

public class CarApp {
	public static void main(String[] args) {
		
		Car carOne = new Car();
		Car carTwo = new Car();
		Car carThree = new Car();

		System.out.println("carOne = " + carOne);
		System.out.println("carTwo = " + carTwo);
		System.out.println("carThree = " + carThree);
		System.out.println("============================================================");
		
		carOne.modelName = "싼타페";// 객체의 필드값 변경

		System.out.println("첫번째 자동차 모델명 = " + carOne.modelName);// 객체의 필드값 사용
		System.out.println("첫번째 자동차 엔진상태 = " + carOne.engineStatus);
		System.out.println("첫번째 자동차 현재속도 = " + carOne.currentSpeed);
		System.out.println("============================================================");
		
		carTwo.modelName = "쏘나타";
		carTwo.engineStatus = true;
		carTwo.currentSpeed = 80;

		System.out.println("두번째 자동차 모델명 = " + carTwo.modelName);
		System.out.println("두번째 자동차 엔진상태 = " + carTwo.engineStatus);
		System.out.println("두번째 자동차 현재속도 = " + carTwo.currentSpeed);
		System.out.println("============================================================");
		
		carOne.startEngine();
		carOne.speedUp(50);
		carOne.speedUp(30);
		carOne.speedDown(40);
		carOne.speedZero();
		carOne.stopEngine();
		System.out.println("============================================================");
		
	}
}

// carOne = oop.Car@3b6eb2ec
// carTwo = oop.Car@1e643faf
// carThree = oop.Car@6e8dacdf
// ============================================================
// 첫번째 자동차 모델명 = 싼타페
// 첫번째 자동차 엔진상태 = false
// 첫번째 자동차 현재속도 = 0
// ============================================================
// 두번째 자동차 모델명 = 쏘나타
// 두번째 자동차 엔진상태 = true
// 두번째 자동차 현재속도 = 80
// ============================================================
// 싼타페의 자동차 시동을 켰습니다.
// 싼타페의 자동차 속도가 50Km/h 증가 되었습니다. 현재 속도는 50Km/h 입니다.
// 싼타페의 자동차 속도가 30Km/h 증가 되었습니다. 현재 속도는 80Km/h 입니다.
// 싼타페의 자동차 속도가 40Km/h 감소 되었습니다. 현재 속도는 40Km/h 입니다.
// 싼타페의 자동차가 멈췄습니다.
// 싼타페의 자동차 시동을 껐습니다.
// ============================================================

위의 CarApp.java 처럼 main 메소드에서
메소드를 이용하지 않고 직접 필드를 다루는 것은 좋지 않다.

0개의 댓글