본문 바로가기
Java

[Java] 클래스

by lmyourpearl 2025. 11. 6.

객체(object)

물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것을 말함.

객체는 속성과 동작으로 구성되어있으며, 자바는 이 속성과 동작을 각각 필드(field)와 메소드(method)라고 부름.

 

객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용 하면서 동작하는데 객체들 사이의 상호작용 수단은 메소드이고 이때 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출.

객체의 상호작용은 객체 간의 메소드 호출을 의미하며 매개값과 리턴값을 통해서 데이터를 주고받음.

 

객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있는데 종류로는 집합 관계, 사용 관계, 상속 관계가 있다.

집합 관계에 있는 객체는 하나의 부품이고 하나는 완성품에 해당하고 사용 관계는 객체 간의 상호작용을 말하며, 상속 관계는 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계를 말함.

 

자바는 객체 지향 프로그래밍(OOP: Object-Oriented Programming)이며, 만들고자 하는 완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법.


클래스(class)

클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.

클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 하며, 클래스로부터 객체를 만드는 과정을 인스턴스화라고 함.

하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있음.

 

클래스 선언

객체의 대표 이름을 하나 결정하는데 이것을 클래스 이름으로 정하고, 첫 글자는 대문자로하며 클래스 이름.java로 소스 파일을 생성.

// public class 클래스이름 {
//
// }

public class Car{

}

public class 키워드는 클래스를 선언할 때 사용하며 반드시 소문자로 작성하고, 클래스 이름 뒤에는 반드시 중괄호{ }를 붙여줌.

public 접근 제한자는 파일 이름과 동일한 이름의 클래스 선언에만 붙일 수 있다.

일반적으로 소스 파일당 하나의 클래스를 선언하지만 2개 이상의 클래스 선언도 가능 함.

 

객체 생성과 클래스 변수

클래스를 선언한 후, 클래스로부터 객체를 생성하려면 new 연산자를 사용한다.

new는 클래스로부터 객체를 생성시키는 연산자이며, new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.

new 연산자로 생성된 객체는 메모리 힙(heap)영역에 생성되며, 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴함.

클래스 변수;
변수 = new 클래스();

클래스 변수 = new 클래스();

 

// 클래스 선언

package sec01.exam01;

public class Student {
}

 

// 클래스로부터 객체 생성

package sec01.exam01;

public class StudentExample {
	public static void main(String[] args) {
    	Student s1 = new Student();
        System.out.println("s1 변수가 Student 객체를 참조합니다.");
        
        Student s2 = new Student();
        System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
    }
 }  

// 실행 결과
// s1 변수가 Student 객체를 참조합니다.
// s2 변수가 또 다른 Student 객체를 참조합니다.

Student 클래스는 하나지만 new 연산자를 사용한 만큼 객체가 메모리에 생성되는데 이러한 객체들은 Student클래스의 인스턴스.

비록 같은 클래스로부터 생성되었지만 각각의 Student 객체는 자신만의 고유 데이터를 가지면서 메모리에서 활동하게 되며, s1과 s2가 

참조하는 Student객체는 완전히 독립된 서로 다른 객체.

 

클래스는 두가지 용도가 있는데 하나는 라이브러리(API: Application Program Interface)용이고 다른 하나는 실행용이며, 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계됨. 프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리 클래스이고 단 하나가 실행 클래스며, 실행 클래스는 프로그램의 실행 진입점인 main( ) 메소드를 제공하는 역할을 함.

 

Student는 라이브러리 클래스이고 StudentExample은 실행 클래스.


클래스의 구성 멤버

클래스에는 객체가 가져야 할 구성 멤버가 선언되는데, 구성 멤버에는 필드, 생성자, 메소드가 있으며 이 구성 멤버들은 생략되거나 복수의 개수로 작성될 수 있음.

public class ClassName {

// 필드
int fieldname;

// 생성자
ClassName(){...}

// 메소드
void methodName(){...}

}

 

필드(Field)

객체의 데이터가 저장되는 곳.

선언 형태는 변수(variable)와 비슷한데 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸하지만

필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재함.

 

생성자(Constructor)

new연산자로 호출되는 특별한 중괄호{ } 블록이며, 객체 생성 시 초기화 역할 담당.

필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하며, 메소드와 비슷하게 생겼지만 생성자는 클래스 이름으로 되어있고

리턴타입이 없음.

 

메소드(Method)

객체의 동작에 해당하는 중괄호{ } 블록을 말하며, 중괄호 블록은 이름을 가지고 있는데 이것이 메소드 이름.

메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행되며, 이때 메소드는 필드를 읽고 수정하는 역할도 하지만 다른 객체를 생성해서 다양한 기능을 수행하기도 함.

메소드는 객체 간의 데이터를 전달하는 수단이며 외부(호출한 곳)로부터 매개값을 받아 실행에 이용하고, 실행 후 결과 값을 외부(호출한 곳)로 리턴할(돌려 줄)수도 있음. 


🔘 클래스 : 객체를 만들기 위한 설계도

 

🔘 객체: 클래스로부터 생성되며 'new 클래스( )'로 생성

 

🔘 new 연산자: 객체 생성 연산자이며, 생성자를 호출하고 객체 생성 번지를 리턴

 

🔘 클래스 변수: 클래스로 선언한 변수를 말하며 해당 클래스의 객체 번지가 저장

 

🔘 인스턴스: 객체는 클래스의 인스턴스

 

🔘 클래스 멤버: 클래스에 선언되는 멤버는 필드, 생성자, 메소드가 있음

 

'Java' 카테고리의 다른 글

[Java] 생성자  (0) 2025.11.09
[Java] 필드  (0) 2025.11.06
[Java] 열거 타입  (0) 2025.11.05
[Java] 배열  (0) 2025.11.04
[Java] 참조 타입과 참조 변수  (0) 2025.11.03