클래스 (Class)
클래스란 객체를 정의한 설계도 또는 틀이라 정의할 수 있다. 즉, 클래스는 객체를 생성하는 데 사용된다. 반대로 객체는 클래스에 의해 정의되고 설계된 내용을 기반으로 생성된다. 또한, 클래스로부터 객체를 만드는 과정을 인스턴스화(Instanctiate)라 한다.
클래스와 객체의 관계는 제품의 설계도와 제품과의 관계와 유사하다. 제품 설계도 없이는 제품을 만들 수 없고, 제품 또한 제품 설계도 없이 만들 수 없기 때문이다.
객체 (Object)
사람과 동물, 물품, 어떤 논리나 사상, 개념, 철학 등과 같이 눈으로 볼 수 있는 것부터 볼 수 없는 것까지 객체의 범주에 포함될 수 있다. 즉, 객체는 우리가 보고 느끼며 인지할 수 있는 모든 것을 의미한다.
객체는 클래스에 의해 정의되고 설계된 내용을 기반으로 생성된다. 객체는 속성과 행위(기능)를 가진다. 즉, 클래스를 통해 만들어진 객체가 실제로 사용할 수 있는 주체가 된다. 객체의 속성은 필드(변수), 행위는 메서드에 해당한다. 속성과 행위는 이너 클래스와 함께 객체의 멤버이다.
클래스를 통해 생성된 객체를 클래스의 인스턴스(instance)라 부른다.
클래스의 구성요소
클래스는 class 키워드를 통해 정의할 수 있으며, 클래스의 이름은 대문자로 시작하는 것이 관례이다.
public class ClassName { // 클래스
int studentNumber = 10; // #1 필드
public int MethodName{ // #2 메서드
}
ClassName { // #3 생성자
}
class ClassName2 { // #4 inner 클래스
}
}
클래스 안에는 필드, 메서드, 생성자, 이너 클래스 네 가지 구성 요소를 작성할 수 있다.
1. 필드 : 클래스의 속성(변수)을 나타낸다. 객체의 데이터, 상태 정보 등을 저장하는 곳이다. 메서드와 생성자 전체에서 사용할 수 있다.
2. 메서드 : 클래스의 행위(메서드)를 나타낸다. 객체 간의 데이터 전달 수단으로 활용된다. 외부로부터 값을 받을 수 있으며, 메서드의 실행 이후 값을 반환할 수 있다.
3. 생성자 : 클래스의 객체를 생성하고 초기화하는 역할을 한다. new 연산자를 통해 호출되며 반환 타입이 없다.
4. 이너 클래스 : 클래스 내부에 존재하는 또 다른 클래스를 의미하고 중첩 클래스라고도 한다. 클래스나 인터페이스 내부에서 선언하고 외부 클래스의 멤버들에 접근할 수 있다.
객체의 속성과 행위 (필드와 메서드)
만약, 자동차 한 대를 하나의 객체라고 바라본다면 이 객체의 속성과 행위는 다음과 같이 정의할 수 있다.
속성 : 모델, 문의 개수, 바퀴의 개수, 색상, … 등
행위 : 시동 걸기, 앞으로 가기, 뒤로 가기, 정지 하기, … 등
이를 실제 코드로 옮겨 클래스의 필드와 메서드로 정의하여 객체의 속성과 행위를 작성한다.
Class Car {
// 필드
String model; // 모델명(속성)
int wheels; // 자동차 바퀴 개수(속성)
int doors; // 자동차 문의 개수(속성)
String color; // 자동차 색상(속성)
void powerOn() { // 메서드
// 전원을 켜는 행위
}
void accelerate() { // 메서드
// 앞으로 가는 행위
}
void backwoards() { // 메서드
// 뒤로 가는 행위
}
void stop() { // 메서드
// 정지 행위
}
}
각 필드에는 알맞은 데이터 타입을 선언하여 자동차의 속성에 알맞도록 정의한다.
메서드를 통해 자동차가 실제 할 수 있는 행위를 코드로 작성한다.
객체의 생성
객체의 생성은 new 키워드를 통해 생성이 가능하다.
생성된 객체는 포인트 연산자(.)를 통해 해당 객체의 멤버에 접근이 가능하다.
이렇게 생성된 객체들은 인스턴스라 하며, 인스턴스는 여러 개 생성될 수 있다.
클래스이름 참조변수이름 = new 생성자(); // 객체의 생성, 생성된 객체는 인스턴스
class CarInstanceCreate {
public static void main(String args) {
Car tesla1 = new Car(); // Car 클래스를 기반으로 생성된 tesla1 인스턴스
Car tesla2 = new Car(); // Car 클래스를 기반으로 생성된 tesla2 인스턴스
Car benz1 = new Car(); // Car 클래스를 기반으로 생성된 benz1 인스턴스
Car benz2 = new Car(); // Car 클래스를 기반으로 생성된 benz2 인스턴스
Car genesis1 = new Car(); // Car 클래스를 기반으로 생성된 genesis1 인스턴스
Car genesis2 = new Car(); // Car 클래스를 기반으로 생성된 genesis2 인스턴스
}
}
객체를 생성한 변수에는 실제 저장된 데이터의 주소 값을 가지고 있다. 위에서 생성한 객체의 실제 데이터는 주소가 가리키는 힙 메모리의 공간에 저장되어 있다.
객체의 활용
생성된 객체를 사용하는 방법은 포인터 연산자 ’.’를 사용하여 객체에 접근하는 것이다.
tesla1.powerOn();
다음은 클래스에서 객체를 정의하고 생성하여 활용하는 예제이다.
// car.java
class Car {
// 필드(속성) 선언
public String model;
public String color;
public int price;
// 생성자(객체의 선언 및 초기화 방법)
public Car(String model, String color, int price) {
this.model = model;
this.color = color;
this.price = price;
}
// 메서드(행위) 선언
void powerOn() {
System.out.println("시동을 켠다");
}
void accelerate() {
System.out.println("앞으로 간다.");
}
void stop() {
System.out.println("멈춘다.");
}
}
// CarTest.java
public class CarTest {
public static void main(String[] args) {
Car genesis = new Car("g80", "black", 1000);
System.out.println("모델명 : " + genesis.model);
System.out.println("색상 : " + genesis.color);
System.out.println("가격(단위: 만 원) : " + genesis.model;
genesis.powerOn();
genesis.accelerate();
genesis.stop();
}
}
'면접' 카테고리의 다른 글
객체 지향 패러다임의 4가지 주요 특성 - Encapsulation(캡슐화) (0) | 2025.04.30 |
---|---|
객체 지향 패러다임의 4가지 주요 특성 - Polymorphism(다형성) (0) | 2025.04.30 |
WebSocket이란? (1) | 2024.10.30 |
면접최종 (1) | 2024.10.02 |
면접준비 3 (0) | 2024.09.30 |