본문 바로가기
Java

[Java] 객체의 생성과 사용

by 작은돼지 2022. 7. 31.

객체(Object)란?


객체는 현실 세계의 사물 또는 개념을 모델링하기 위해 사용된다.

 

예를 들어 ‘자동차‘라는 현실 세계의 객체를 모델링하려면

’자동차‘ 클래스를 정의하고, 이를 인스턴스화하여 ’자동차‘ 객체를 생성할 수 있다.

이렇게 생성된 객체는 속성과 메서드를 가질 수 있다.

 

객체(Object)와 인스턴스(Instance)의 차이점
객체는 속성과 메서드로 정의된 일반적이고 추상적인 의미로 사용
인스턴스는 특정 클래스로부터 생성된 객체를 의미

 

 

클래스(Class)란?


클래스는 객체를 생성하기 위한 틀 또는 설계도

클래스는 객체의 공통적인 속성과 동작을 정의한다.

예를 들어 ‘자동차’ 클래스는 ‘자동차‘ 객체를 생성하기 위한 속성(field)과 동작(method)을 정의한다.

 

 

클래스 작성 규칙


하나의 소스 파일에는 하나의 클래스만 작성하는 것이 원칙이지만, 여러 개를 작성할 수도 있다.

단, public 클래스의 이름은 소스 파일의 이름과 일치해야 하며, 하나의 소스 파일에는 하나의 public 클래스만 허용한다.

 

 

객체의 생성과 사용


new 키워드는 객체를 생성하는 연산자이다.
new Car();

위와 같은 코드를 보고 우리는 Car 객체를 생성한다고 말한다.

공식 문서에는 '클래스의 인스턴스화'라고 정의되어 있고 '객체를 생성한다'와 동일한 의미로 사용된다.

 

new 연산자는 생성자 호출을 필요로 하므로 후위 인수(postfix argument)로 생성자가 위치해야 하며

새로운 객체를 위한 메모리를 동적으로 할당하고, 해당 메모리의 참조값을 반환한다.

 

일반적으로 new 키워드를 사용해 객체를 생성할 경우 해당 클래스 타입의 변수에 할당하여 사용한다.
Car car = new Car();
car.driver();

 

반드시 변수에 할당해야 하는 것은 아니며 아래와 같이 직접 표현식에서 사용할 수도 있다.
new Car();
new Car().printState();
int price = new Car().getPrice();

 

객체의 멤버 변수에 접근할 때는 직접 접근 보다 메서드를 통해 접근하는 것이 권장된다.
public class Car {
	private int price; // private로 지정

	public Car() {
		this.price = 30_000_000;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}

public class Seller {

	public static void main(String[] args) {
		Car car = new Car();
        
		// car.price = 32_000_000; // 직접 접근 불가
		car.setPrice(32_000_000); // setter 메서드 사용

		// System.out.println(car.price); // 직접 접근 불가
		System.out.println(car.getPrice()); // getter 메서드 사용
	}

}

이는 캡슐화의 장점인 정보 은닉과 관련이 있다.

외부로부터 내부 구현을 숨길 수 있고, 객체을 더 안전하게 유지할 수 있도록

객체의 내부 상태를 외부에서 직접 접근하는 것을 제한하고

외부에 공개된 인터페이스(메서드)를 통해서만 상호작용할 수 있게 하는 것이다.

 

 

참고자료


https://docs.oracle.com/javase/tutorial/java/javaOO/index.html

 

Lesson: Classes and Objects (The Java™ Tutorials > Learning the Java Language)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com