Java/강의
[📙 Java 문법 종합반] 2-1. 클래스와 객체
가지코딩
2025. 4. 15. 15:52
📙 목차
🧡 학습 목표
- 클래스와 객체가 무엇인지 학습한다.
- 클래스를 직접 만들어보고 객체화하는 방법을 학습한다.
1. 클래스(class)란?
- Java에서 클래스는 객체를 만들 때 필요한 청사진(설계도)이다.
- 클래스의 첫 글자는 대문자
2. 객체(object)란?
- 실제로 존재하는 것
- 우리가 주변에서 볼 수 있는 컴퓨터, 계산기, 자동차 같은 사물들이 객체이다.
- 어떤 개념이나 논리 같은 것들도 객체가 될 수 있다.
- 덧셈, 뺄셈 등 눈에 보이지 않은 것들도 무형의 객체가 될 수 있다.
- 클래스가 준비되어 있다면 클래스를 기준으로 여러 객체들을 만들어 낼수 있다.
Person.class - 사람이라는 객체를 만들어 보자
- Person 클래스는 사람 객체를 만들기 위한 설계도이다.
public class Person() {
...
}
- 객체를 만들때 new 라는 키워드를 사용한다.
- 객체를 만드는 과정을 인스턴스화라고 표현한다.
- 인스턴스화가 되면 Java 메모리 상에 객체가 만들어진다.
public class Main {
public static void main(String[] args) {
Person personA = new Person(); // ✅ 첫번째 객체 생성
Person personB = new Person(); // ✅ 두번째 객체 생성
}
}
3. 클래스 구조(속성, 생성자, 기능)
클래스 구조는 속성, 생성자, 기능 부분으로 나누어진다.
class Person {
// 1. 속성
String name;
int age;
String address;
// 2. 생성자
Person() {}
// 3. 기능
void introduce() {
System.out.println("안녕하세요.");
System.out.println("나의 이름은 " + this.name + "입니다.");
System.out.println("나이는 " + this.age + "입니다.");
}
}
속성 (property, field)
- 클래스가 가지는 데이터(상태)를 저장하는 변수이다
- 클래스 내부에 선언된 변수로, 객체의 고유한 정보를 담는다.
- 특징
- 객체가 생성될 때 각 객체별로 따로 저장된다.
- 접근 제어자(private, public, 등)를 붙여 정보 은닉을 하기도 한다.
- 객체를 통해 접근 가능하다. (객체명.속성())
class Person {
String name;
int age;
String address;
}
public class Main {
public static void main(String[] args) {
// 1. 객체 생성
Person personA = new Person();
Person personB = new Person();
// 2. ✅ 객체를 통해 접근 personA 의 name
System.out.println(personA.name);
// 3. ✅ 객체를 통해 접근 personB 의 name
System.out.println(personB.name);
}
}
생성자 (Constructor)
- 객체가 생성될 때 자동으로 호출되는 메서드
- 객체의 초기 상태를 설정할 때 사용한다.
- 클래스 이름과 동일하며, 리턴 타입이 없다
- 특징
- 생성자를 명시하지 않으면 기본 생성자가 자동으로 제공된다.
- 여러 개의 생성자를 만들 수 있으며, 이를 생성자 오버로딩이라고 한다.
class Person {
String name;
int age;
String address;
// ❌ 기본생성자 제거됨
Person() {}
// 새로운 생성자
Person(String name, int age) {
this.name = name; // this는 현재 객체를 참조
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person personB = new Person("Steve", 5);
}
}
기능(메서드, Method)
- 객체가 수행할 수 있는 동작 또는 행위
- 함수와 유사하지만 클래스 내부에 존재한다.
- 특징
- 객체를 통해 호출 가능하다. (객체명.메서드())
- 메서드는 리턴 타입이 있으며, void는 리턴값이 없음을 의미한다.
public class Person {
String name;
int age;
public void sayHello() {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
public int getAgeInMonths() {
return age * 12;
}
}
public class Main {
public static void main(String[] args) {
Person personA = new Person("gygim", 10);
personA.sayHello(); // ✅ personA 객체 introduce() 호출
}
}
4. 게터(getter)와 세터(setter)
게터(getter)
클래스의 속성을 가져올 때 사용되는 기능이다.
String getName() {
return this.name;
}
int getAge() {
return this.age;
}
String getAddress() {
return this.address;
}
String name = person.getName();
int age = person.getAge();
String address = person.getAddress();
세터(Settter)
객체의 속성을 외부에서 설정할 수 있게 해주는 기능이다.
void getName(String name) {
this.name = name;
}
void getAge(int age) {
this.age = age;
}
void setAddress(String address) {
this.address = address;
}
public class Main {
public static void main(String[] args) {
Person personA = new Person("gygim", 20);
Person personB = new Person("Steve", 15);
personA.setAddress("서울"); // ✅ personA 의 주소 설정
personB.setAddress("미국"); // ✅ personA 의 주소 설정
}
}
5. 실습 과제
자동차 클래스를 상상해서 만들어 보고 활용해 보세요.
- Car 클래스를 만든다.
- 속성 - 자동차의 속성을 저장할 변수를 만든다.
- 생성자 - 조립할 속성을 골라 객체화를 시켜주세요.
- 기능 - 다양한 기능을 만들어보고 활용해보세요.
- drive() 주행 기능
- accelerate() 가속 기능
public class Car {
String name;
String color;
int speed = 100;
Car(String name, String color){
this.name = name;
this.color = color;
}
void drive() {
System.out.printf("%s %s 주행 시작\n", this.color, this.name);
}
void accelerate() {
this.speed += 10;
System.out.println("현재 속도: " + this.speed);
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("BMW", "검은색");
myCar.drive();
myCar.accelerate();
myCar.accelerate();
myCar.accelerate();
}
}