티스토리 뷰

Java+Spring/Java

[Java]객체의 생성과 활용

Vagabund.Gni 2022. 7. 8. 19:34
728x90
반응형

객체의 생성

 

지난 객체와 클래스 글에서 new 키워드를 이용해 객체를 생성하는 법을 확인했다.

 

https://gnidinger.tistory.com/381

 

[Java]클래스(Class)와 객체(Object)

객체지향 프로그래밍(Object Oriented Progamming)은 객체가 무엇인지 아는 것에서 시작한다. 객체를 알기 위해선 객체를 생성하는 도구인 클래스에 대해서도 알아야 하는데, 각각의 개념은 다음과 같

gnidinger.tistory.com

class CarTest {
	public static void main(String[] args) {

	Car bmw = new Car();   // Car 클래스로 만들어진 bmw 인스턴스
	Car tesla = new Car(); // Car 클래스로 만들어진 tesla 인스턴스
	Car audi = new Car();  // Car 클래스로 만들어진 audi 인스턴스
    클래스명 참조변수명 = new 생성자;
    
}

 

객체를 생성하는 과정을 조금 더 자세히 알아보자.

 

가장 먼저, 특정 클래스명의 참조변수를 선언한다. 이어서 new 키워드와 생성자를 이용해 객체를 생성하여 참조변수에 할당한다.

 

여기서 참조변수는 실제 객체의 데이터 값이 아니라 데이터가 저장된 주소, 정확하게는 힙 메모리의 주소값을 가리킨다.

 

new 키워드 자체는 생성된 객체를 힙 메모리에 할당하라는 의미를 가지고 있으며,

 

객체를 생성할 시 메모리의 구조에 대한 더 구체적인 설명은 아래 그림과 같다.

 

  • 클래스 Person과 참조변수 p는 각각 클래스 영역과 스택 영역에 저장이 된다.
  • 생성된 객체는 힙 메모리 영역에 저장되며, 객체 안에 클래스의 멤버들이 들어가게 된다.
  • 참조변수는 힙 메모리에 저장된 객체의 주소 값을 가리키게 된다.

 

그림에서 알 수 있는 또 다른 사실은 메서드의 구현 위치가 클래스 영역이라는 점이다.

 

좀 더 구체적으로는 메서드의 구현 코드는 클래스 영역에 위치하고 객체의 메서드는 그 위치를 가리키게 된다.

 

이는 같은 클래스로 만들어낸 모든 객체가 같은 메서드 구현 코드를 공유하며, 인스턴스가 생성될 때마다

 

메서드를 선언해주는 것이 아니라 필요한 경우에 클래스 영역에 정의된 메서드를 찾아 사용한다는 것을 의미한다.

 

요약하면, 객체의 필드값은 실제 저장공간이 객체의 내부이며 메서드는 클래스 영역에 저장해놓고 공유한다.

 


 

객체의 활용

 

생성한 객체는 활용해야 한다.

 

이 경우 쓰이는 것이 포인트 연산자 "."이며, 기본적인 문법은 다음과 같다.

 

참조변수명.필드명 // 필드값 불러오기
참조변수명.메서드명 // 메서드 호출

 

포인트 연산자는 도트 연산자라고 불리기도 하며 특정 객체 안을 보라는 의미를 가진다.

 

그럼 지금까지 알아본 클래스와 객체, 그 멤버들을 이용해 실제로 동작하는 코드를 살펴보자.

 

public class CarTest {
    public static void main(String[] args) {
        Car tesla = new Car("Model 3", "빨강"); // 객체 생성. 

        System.out.println("내 차의 모델은 " + tesla.model + "이고 " + "색은 " + tesla.color + "입니다."); // 필드 호출
        tesla.power(); // 메서드 호출
        tesla.accelerate();
        tesla.stop();
    }
}

class Car {
    public String model; // 필드 선언
    public String color;

    public Car(String model, String color) { // 인스턴스 초기화를 위한 생성자 함수. 이후 챕터에서 학습 예정.
        this.model = model;
        this.color = color;
    }

    void power() { // 메서드 선언
        System.out.println("시동을 걸었습니다.");
    }

    void accelerate() {
        System.out.println("더 빠르게!");
    }

    void stop(){
        System.out.println("멈춰!!");
    }
}

// 출력값
내 차의 모델은 Model 3이고 색은 빨강입니다.
시동을 걸었습니다.
더 빠르게!
멈춰!!

 

먼저 model과 color를 필드(특성 = 변수)로 가지며

 

power(), accelerate(), stop()을 메서드(기능=함수)로 지니는 Car클래스를 정의했다.

 

이어서 CarTest클래스 안에서  tesla라는 이름의 인스턴스(=객체)를 만든 후

 

미리 정의된 필드와 메서드를 포인트 연산자를 이용해 불러왔다.

 

출력 값이 원하는 대로 잘 출력되는 것을 확인할 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함