우리의 IT
JAVA - 클래스 본문
✅ Java - 클래스 (Class)
✔ 클래스란?
Java에서 클래스(Class) 는 객체를 생성하는 설계도(템플릿) 역할을 합니다.
✔ 속성(필드)과 동작(메소드)을 정의
✔ 객체(Object) 생성의 기본 단위
✔ 코드를 모듈화하여 재사용성 향상
🔹 1. 클래스 기본 구조
📌 클래스 선언 및 객체 생성
class Car { // 클래스 선언
String brand; // 필드 (속성)
int speed;
void drive() { // 메소드 (기능)
System.out.println(brand + "가 " + speed + "km/h로 달립니다.");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car(); // 객체 생성
myCar.brand = "Hyundai";
myCar.speed = 100;
myCar.drive(); // 메소드 호출
}
}
✅ 출력
Hyundai가 100km/h로 달립니다.
✅ 클래스 핵심 구성 요소
요소 설명
| 필드(Field) | 객체의 속성을 나타내는 변수 |
| 메소드(Method) | 객체의 동작(기능)을 정의 |
| 생성자(Constructor) | 객체 초기화를 담당 |
| 객체(Object) | 클래스를 기반으로 생성된 인스턴스 |
🔹 2. 생성자 (Constructor)
📌 생성자는 객체가 생성될 때 자동으로 호출됨
class Person {
String name;
int age;
// 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
void introduce() {
System.out.println("안녕하세요, 저는 " + name + "이고, " + age + "살입니다.");
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("홍길동", 25);
p1.introduce();
}
}
✅ 출력
안녕하세요, 저는 홍길동이고, 25살입니다.
✅ 생성자의 특징
- 클래스와 동일한 이름을 가짐
- 리턴 타입이 없음
- new 키워드를 사용하여 객체 생성 시 호출됨
- 여러 개의 생성자 오버로딩 가능
📌 기본 생성자 (매개변수가 없는 생성자)
class Person {
String name;
Person() {
this.name = "Unknown"; // 기본 값 설정
}
}
🔹 3. 메소드 오버로딩 (Method Overloading)
📌 같은 이름의 메소드를 여러 개 정의할 수 있음
class MathUtils {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) { // 메소드 오버로딩
return a + b;
}
}
public class Main {
public static void main(String[] args) {
MathUtils math = new MathUtils();
System.out.println(math.add(3, 5)); // 8
System.out.println(math.add(2.5, 3.2)); // 5.7
}
}
✅ 메소드 오버로딩의 조건
- 매개변수의 타입, 개수, 순서가 달라야 함
- 반환 타입만 다르면 안 됨
🔹 4. 접근 제어자 (Access Modifiers)
📌 클래스의 필드와 메소드 접근을 제한하는 키워드
접근 제어자 같은 클래스 같은 패키지 자식 클래스 전체 접근
| private | ✅ | ❌ | ❌ | ❌ |
| default | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
📌 예제
class BankAccount {
private int balance = 1000; // private: 클래스 내부에서만 접근 가능
public int getBalance() { // public: 외부에서도 접근 가능
return balance;
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
// System.out.println(account.balance); // 오류 발생 (private 변수 접근 불가)
System.out.println(account.getBalance()); // 1000
}
}
✅ 출력
1000
🔹 5. 상속 (Inheritance)
📌 기존 클래스의 기능을 물려받아 확장 가능 (extends 사용)
class Animal {
String name;
void eat() {
System.out.println(name + "가 먹고 있습니다.");
}
}
// `extends` 키워드를 사용하여 Animal 클래스를 상속
class Dog extends Animal {
void bark() {
System.out.println(name + "가 짖고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.name = "바둑이";
myDog.eat(); // 부모 클래스 메소드
myDog.bark(); // 자식 클래스 메소드
}
}
✅ 출력
바둑이가 먹고 있습니다.
바둑이가 짖고 있습니다.
🔹 6. 추상 클래스 (Abstract Class)
📌 추상 클래스는 객체를 생성할 수 없고, 반드시 상속하여 사용해야 함
abstract class Animal {
abstract void makeSound(); // 추상 메소드 (구현 필요)
void eat() {
System.out.println("먹이를 먹습니다.");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 멍멍!
dog.eat(); // 먹이를 먹습니다.
}
}
✅ 출력
멍멍!
먹이를 먹습니다.
🔹 7. 인터페이스 (Interface)
📌 클래스가 반드시 구현해야 하는 메소드 목록을 정의
interface Animal {
void makeSound(); // 인터페이스는 메소드의 선언만 가능 (구현 X)
}
class Cat implements Animal {
public void makeSound() { // 반드시 구현해야 함
System.out.println("야옹!");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.makeSound();
}
}
✅ 출력
야옹!
✅ 인터페이스 특징
- 다중 상속 가능 (implements 여러 개 사용 가능)
- 추상 클래스보다 추상화 수준이 높음
🚀 정리
개념 설명
| 클래스 | 객체를 생성하는 설계도 |
| 필드 | 클래스의 속성 (변수) |
| 메소드 | 클래스의 동작 (함수) |
| 생성자 | 객체 초기화 메소드 |
| 상속 | extends 키워드로 부모 클래스를 상속 |
| 추상 클래스 | abstract 키워드 사용, 구현 강제 |
| 인터페이스 | implements 키워드 사용, 다중 구현 가능 |
✅ 클래스를 활용하면 객체 지향 프로그래밍(OOP)을 쉽게 구현할 수 있음! 🚀
'정보처리기사' 카테고리의 다른 글
| 파이썬 - 컬렉션 자료형 (0) | 2025.03.27 |
|---|---|
| 파이썬 - 기본 자료형 (0) | 2025.03.27 |
| JAVA - 배열 (0) | 2025.03.27 |
| C언어 - 포인터 (0) | 2025.03.27 |
| C언어 - 유틸리티 함수 (0) | 2025.03.27 |