안녕하세요? 다시 돌아온 돌아버릴거같은 Dorothy입니다!
(이유를 적으려다가 tmi 같아서 이하 생략..)
오늘은 1) 클래스(Class)와 객체(인스턴스)의 개념과 관계,
그리고 2) 객체지향프로그래밍(OOP)의 개념에 대해서 공부 해보겠습니다.
1] 클래스와 객체(인스턴스): 객체 지향 프로그래밍(OOP) 핵심 개념
1. 클래스 (Class)
클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 클래스는 객체가 가질 속성(데이터)과 행동(메서드)을 정의합니다. 클래스 자체는 구체적인 값을 가지지 않으며, 단지 객체를 만들기 위한 틀을 제공합니다.
- 속성 (Attributes): 클래스가 가지는 데이터. 필드(field)라고도 합니다.
- 메서드 (Methods): 클래스가 할 수 있는 동작. 함수라고도 합니다.
2. 객체 (Object) 또는 인스턴스 (Instance)
객체는 클래스로부터 생성된 구체적인 개체입니다. 객체는 클래스에서 정의한 속성과 메서드를 실제로 가지고 있으며, 메모리에 할당됩니다. 객체는 클래스의 인스턴스라고도 합니다.
- 인스턴스화 (Instantiation): 클래스를 기반으로 객체를 생성하는 과정입니다.
용어 설명
클래스 (Class):
객체를 생성하기 위한 청사진입니다.
속성(데이터)과 메서드(동작)를 정의합니다.
예: Car 클래스는 자동차의 속성(색상, 모델)과 동작(주행)을 정의합니다.
객체 (Object) 또는 인스턴스 (Instance):
클래스로부터 생성된 구체적인 개체입니다.
클래스에서 정의한 속성과 메서드를 실제로 가집니다.
예: myCar와 yourCar는 Car 클래스의 인스턴스입니다.
클래스와 객체의 관계
- 클래스는 객체를 만들기 위한 설계도이며, 객체는 이 설계도를 바탕으로 만들어진 실제 개체입니다.
- 여러 객체가 하나의 클래스로부터 생성될 수 있으며, 각 객체는 독립적인 상태를 가집니다.
비유
- 클래스: 집을 짓기 위한 설계도 (집의 구조와 기능을 정의).
- 객체: 설계도를 바탕으로 실제로 지어진 집 (구체적인 집의 인스턴스).
2] 클래스(Class)의 구성
1. 필드 (Fields)
필드는 클래스의 속성을 나타내는 변수입니다. 필드는 객체의 상태를 저장하며, 인스턴스 필드와 정적(클래스) 필드로 나눌 수 있습니다.
- 인스턴스 필드: 각 객체가 개별적으로 가지는 속성.
- 정적 필드: 클래스 자체에 속하며, 모든 객체가 공유하는 속성.
public class Car {
// 인스턴스 필드
private String color;
private String model;
// 정적 필드
private static int numberOfCars;
}
2. 생성자 (Constructors)
생성자는 클래스의 인스턴스를 초기화하는 메서드입니다. 생성자는 클래스 이름과 동일하며, 반환 타입이 없습니다. 객체가 생성될 때 호출되어 필드의 초기값을 설정합니다.
public class Car {
private String color;
private String model;
// 생성자
public Car(String color, String model) {
this.color = color;
this.model = model;
}
}
3. 메서드 (Methods)
메서드는 클래스의 동작을 정의하는 함수입니다. 메서드는 객체의 필드를 조작하거나 특정 기능을 수행할 수 있습니다. 메서드에는 인스턴스 메서드와 정적 메서드가 있습니다.
- 인스턴스 메서드: 객체의 인스턴스를 통해 호출되는 메서드.
- 정적 메서드: 클래스 이름을 통해 호출되는 메서드.
public class Car {
private String color;
private String model;
public Car(String color, String model) {
this.color = color;
this.model = model;
}
// 인스턴스 메서드
public void drive() {
System.out.println(model + " is driving.");
}
// 정적 메서드
public static void displayNumberOfCars() {
System.out.println("Number of cars: " + numberOfCars);
}
}
4. 접근 제어자 (Access Modifiers)
접근 제어자는 클래스, 필드, 생성자, 메서드의 접근 범위를 지정합니다. 주요 접근 제어자에는 private, protected, public, default가 있습니다.
- private: 클래스 내에서만 접근 가능.
- protected: 동일 패키지 내에서 접근 가능하며, 서브클래스에서도 접근 가능.
- public: 모든 클래스에서 접근 가능.
- default: 동일 패키지 내에서만 접근 가능 (명시적인 접근 제어자가 없을 때).
public class Car {
private String color; // private 필드
protected String model; // protected 필드
public static int numberOfCars; // public 정적 필드
// public 생성자
public Car(String color, String model) {
this.color = color;
this.model = model;
}
// public 메서드
public void drive() {
System.out.println(model + " is driving.");
}
// private 메서드
private void displayColor() {
System.out.println("Color: " + color);
}
}
5. 내부 클래스 (Inner Classes)
내부 클래스는 다른 클래스 내에 정의된 클래스입니다. 내부 클래스는 외부 클래스의 필드와 메서드에 접근할 수 있습니다. 이것은 1)인스턴스 내부 클래스, 2)정적 내부 클래스, 3)지역 내부 클래스, 4)익명 내부 클래스로 구성되어 있습니다.
public class OuterClass {
private String outerField;
// 인스턴스 내부 클래스
public class InnerClass {
public void display() {
System.out.println("Outer field: " + outerField);
}
}
// 정적 내부 클래스
public static class StaticInnerClass {
public void display() {
System.out.println("Static inner class");
}
}
}
요약
필드 (Fields): 객체의 속성을 나타내는 변수.
생성자 (Constructors): 객체를 초기화하는 메서드.
메서드 (Methods): 객체의 동작을 정의하는 함수.
접근 제어자 (Access Modifiers): 클래스, 필드, 생성자, 메서드의 접근 범위를 지정.
내부 클래스 (Inner Classes): 다른 클래스 내에 정의된 클래스.
이상입니다!
archived by. https://xogns93.tistory.com/7
'3. Java' 카테고리의 다른 글
[JAVA] Concurrency 1 (High Level Programming Language/Essential Java Classes) (137) | 2024.07.30 |
---|---|
[JAVA] Semantics (High Level Programming Language) (77) | 2024.07.24 |
[JAVA] JVM 메모리 구조란? (자바 가상 머신에 대해서 AraBoJa) (113) | 2024.07.21 |
[JAVA] 고급 프로그래밍 언어(High Level Programming Language) (114) | 2024.07.20 |
[JAVA] 자바 클래스 파일(feat. compiler) (92) | 2024.07.19 |