클래스
클래스 = 설계도 이다. 더 간단히 설명하면 붕어빵 틀이라고 생각하면된다.
클래스의 구성 요소
- 필드(Field): 클래스의 속성을 나타내며, 객체가 가져야 할 데이터나 상태를 저장합니다. 필드는 변수와 유사하지만 클래스 내에 정의되어 객체의 상태를 나타내는 데 사용됩니다.
- 메소드(Method): 클래스가 수행하는 행동이나 기능을 정의합니다. 객체가 수행할 수 있는 작업을 메소드로 정의하며, 필드를 조작하거나 특정 기능을 수행하는 역할을 합니다.
- 생성자(Constructor): 객체를 생성할 때 호출되는 특별한 메소드로, 클래스 이름과 동일한 이름을 가집니다. 생성자를 통해 객체의 초기 상태를 설정할 수 있습니다.
- 접근 제어자(Access Modifier): 클래스, 필드, 메소드에 접근할 수 있는 범위를 제한하는 키워드입니다. 주로 public, private, protected 등이 있으며, 접근 범위를 명시하여 데이터 보호와 캡슐화를 구현할 수 있습니다.
메소드와 함수의 차이
- 메소드(Method):
- 객체 지향 프로그래밍(OOP)에서 객체의 행위를 정의하는 코드 블록입니다.
- 클래스 내부에 정의되며, 특정 객체의 상태(필드)에 접근하고 이를 조작하는 데 사용됩니다.
- 메소드는 클래스에 종속적이기 때문에 객체를 통해 호출됩니다.
- Java에서는 모든 함수가 클래스 안에 있어야 하므로, Java에서는 함수 대신 "메소드"라는 용어를 사용합니다.
- 함수(Function):
- 함수는 독립적인 코드 블록으로, 특정 작업을 수행하기 위해 사용됩니다.
- 객체 지향 언어가 아닌 프로그래밍 언어(예: C, JavaScript(ES6 이전))에서는 함수가 클래스에 소속되지 않고, 단독으로 존재할 수 있습니다.
- 함수는 클래스나 객체에 종속되지 않고, 필요에 따라 어디서든 호출할 수 있는 독립적인 개념입니다.
즉, 모든 메소드는 함수이지만, 모든 함수가 메소드인 것은 아닙니다. 메소드는 객체에 속한 함수로 볼 수 있습니다.
public class Calculator {
public int add(int a, int b) { // add는 Calculator 클래스의 메소드
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
System.out.println(calculator.add(5, 3)); // 8
}
}
자동차 클래스 생성
public class Car {
String company; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도, km/h 단위
char gear; // 기어 상태, P (주차), R (후진), N (중립), D (주행)
boolean lights; // 자동차 조명 상태, 켜짐(true) 또는 꺼짐(false)
// 기본 생성자: 매개변수 없이 Car 객체를 생성
public Car() {}
// gasPedal 메서드: 속도를 설정하는 메서드로 kmh 값을 speed 필드에 저장하고 반환
double gasPedal(double kmh) {
speed = kmh; // 자동차의 현재 속도를 kmh 값으로 설정
return speed; // 설정된 속도 반환
}
// brakePedal 메서드: 속도를 0으로 설정하는 메서드로, speed 필드를 0으로 설정하고 반환
double brakePedal() {
speed = 0; // 속도를 0으로 설정하여 정지 상태로 만듦
return speed; // 속도 0을 반환
}
// changeGear 메서드: 기어 상태를 변경하는 메서드로, type 값을 gear 필드에 저장하고 반환
char changeGear(char type) {
gear = type; // 기어를 매개변수 type의 값으로 설정
return gear; // 설정된 기어 상태 반환
}
// onOffLights 메서드: 조명 상태를 반전시키는 메서드로, 현재 lights 값을 반전시키고 반환
boolean onOffLights() {
lights = !lights; // 현재 조명 상태를 반전(true -> false, false -> true)
return lights; // 변경된 조명 상태 반환
}
// horn 메서드: 경적을 울리는 메서드로, 호출 시 "빵빵" 소리를 콘솔에 출력
void horn() {
System.out.println("빵빵"); // 경적 소리 출력
}
}
public class Main {
public static void main(String[] args) {
// Car 객체 생성
Car car = new Car();
// gasPedal 호출하여 속도 설정 및 출력
System.out.println("Current Speed: " + car.gasPedal(80)); // 속도 80 km/h 설정
// brakePedal 호출하여 속도 정지 상태로 변경 및 출력
System.out.println("Current Speed after braking: " + car.brakePedal()); // 속도 0 km/h 설정
// changeGear 호출하여 기어 상태 변경 및 출력
System.out.println("Current Gear: " + car.changeGear('D')); // 기어를 D로 변경
// onOffLights 호출하여 조명 상태 반전 및 출력
System.out.println("Lights On/Off: " + car.onOffLights()); // 조명 상태 변경
// horn 호출하여 경적 소리 출력
car.horn(); // "빵빵" 출력
}
}
객체 생성
new Car(); // Car클래스 객체 생성
- 객체 생성 연산자인 ‘new’를 사용하면 클래스로부터 객체를 생성할 수 있습니다.
- new 연산자 뒤에는 해당 클래스의 생성자 호출 코드를 작성합니다.
- 형태가 Car();즉, 기본 생성자의 형태와 같기 때문에 new 연산자에 의해 객체가 생성되면서 기본 생성자가 호출됩니다.
참조형 변수
Car car1 = new Car(); // Car클래스의 객체인 car1 인스턴스 생성
Car car2 = new Car(); // Car클래스의 객체인 car2 인스턴스 생성
- new 연산자를 통해서 객체가 생성되면 해당 인스턴스의 주소가 반환되기 때문에 해당 클래스의 참조형 변수를 사용하여 받아줄 수 있다.
객체 배열
- 객체는 참조형 변수와 동일하게 취급되기 때문에 배열 또는 컬렉션에도 저장하여 관리할 수 있다.
public class Main {
public static void main(String[] args) {
Car[] carArray = new Car[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);
}
}
}
// 출력
//car.gear = P
//car.gear = N
//car.gear = D
'Back-End (Web) > JAVA' 카테고리의 다른 글
[JAVA] 인스턴스 멤버와 클래스 멤버 (0) | 2024.11.12 |
---|---|
[JAVA] 객체의 필드와 메서드 (0) | 2024.11.12 |
[JAVA] 객체지향 프로그래밍 (1) | 2024.11.12 |
[JAVA] 참조형 자료구조 정리(LIST / STACK / QUEUE / SET / MAP) (0) | 2024.11.11 |
[JAVA] 배열 (0) | 2024.11.11 |