[자바] 객체(object), 클래스(class)

컴공생의 코딩 일기·2021년 7월 26일
0

자바

목록 보기
3/10
post-thumbnail

객체(object)란?

객체(object)란 세상에 존재하는 사물이나 생명을 의미합니다.
이렇게 말하면 이해하기 어려울 수 있으니 예를 하나 들어 보겠습니다.
하나의 자동차가 존재한다고 가정해 봅시다. 만약 자동차에 바퀴가 없다면 자동차가 이동을 할 수 있을까요? 또 만약 자동차에 핸들이 없다면 자동차를 운전할 수 있을까요? 자동차에 중요한 기능 중에 하나라도 없다면 자동차는 움직일 수 없습니다. 즉 객체(object)는 완전체입니다. 자동차가 모든 기능을 할 수 있을 때 비로소 자동차는 객체(object)가 됩니다.

객체(object)를 구현하기 위해서는 그전에 클래스(class)가 필요합니다.

클래스(class)란?

클래스(class)란 설계도입니다. 완전한 자동차를 만들기 위해서는 설계도가 필요합니다. 자동차를 만드는 프로그램을 설계한다면 다음과 같은 단계가 필요합니다.

속성자동차 회사, 색깔, 자동차 이름, 번호판 번호 등                              
기능시동이 켜진다, 시동이 꺼진다, 와이퍼가 움직인다, 와이퍼가 멈춘다 등

속성 == 변수
기능 == 메서드

클래스 선언 방법

클래스(class) 작성 규칙
1. 클래스(class) 이름은 하나 이상의 문자로 이루어져야 한다.
2. 이름에 첫 번째 문자에는 숫자나 특수문자가 올 수 없다.(단 &, _는 첫 문자에 올 수 있다.)
3. 예약어를 사용할 수 없다.
3. 클래스에 첫 번째 문자에는 보통 대문자로 시작하고 카멜 표기법을 사용한다.
(카멜 표기법 이란 서로 다른 단어가 연속일 경우 첫 번째 단어를 제외한 두 번째 단어부터 첫 번째 문자를 대문자로 표기한다. 예) myName, myCar 등
클래스(class)는 첫 번째 단어에 첫 문자도 대문자로 표기한다 예) MyName, MyCar)

class 클래스명{
    변수 혹은 메서드
}

클래스(class) 선언 방법은 class 변수 명 {} 입니다.

클래스(class) = 데이터(data)+메서드(method)로 이루어져 있습니다.

쉽게 생각해서 속성을 정의하고 싶으면 변수를 선언하면 되고 기능을 정의하고 싶으면 메서드를 정의하면 됩니다.

인스턴스(instance)란?

인스턴스(instance)란 쉽게 말해서 클래스(class)에서 설계한 것들을 사용하는 것 을 인스턴스(instance)라고 합니다.

인스턴스(instance)는 객체와 매우 유사한 의미를 가지며 객체는 모든 인스턴스(instance)에 포괄적인 의미를 갖습니다.

객체와 인스턴스에 차이점 은 객체는 클래스(class) 타입으로 선언되었을 때 객체라고 하고 그 객체가 메모리에 할당되어 사용 가능할 때 인스턴스라고 합니다.

인스턴스 생성

예를 들어 클래스명을 Car라고 하고 객체를 생성해 보겠습니다.

1. Car car ; // Car 클래스 타입인 car 레퍼런스 변수 선언
2. new Car(); // new 연산자를 통해 Car 클래스에 크기만큼 메모리를 할당 
3. Car car = new Car(); // 코드를 한 번에 작성 (가장 많이 사용합니다!!!)

자바에서 객체에 위치는 레퍼런스로 값으로 변수에 저장되어 사용되기 때문에 우선 변수를 선언해야 합니다. 객체에 레퍼런스 값은 참조형 변수라고 하고 선언하는 방식은 일반 변수와 같지만 저장하는 위치가 다릅니다.

new 연산자란?

new 연산자란 heap(힙) 메모리 영역에 메모리 공간을 할당해 주고 메모리 주소를 반환하고 인스턴스를 생성하는 것을 의미합니다.

레퍼런스란?
레퍼런스 란 변수를 간접적으로 가리키는 것을 레퍼런스라고 합니다.
반대로 기본형은 변수를 직접적으로 가리키는 것을 의미 합니다.

  • 기본형
  1. int
  2. double
  3. boolean
  • 레퍼런스
  1. 클래스 타입
  2. 사용자 정의형 타입

변수 a에 데이터 타입은 int형 타입이기 때문에 기본형입니다. 그렇기 때문에 stack(스택)에 직접적으로 값을 가리키고 car에 데이터 타입은 Car 클래스(class) 타입이기 때문에 Stack에 레퍼런스 값을 간접적으로 가리키고 레퍼런스 값은 Heap(힙) 영역을 가리킵니다.

예제)

// car.java 

public class Car {

	// 멤버 변수
	public int maxSpeed; // 속도
	public String carName; // 이름
	public int released; // 연식
	public int liiter; // 주유량
	public String color; // 색상
	public int price; // 가격

	// 멤버 메서드
	public void printInfo() {
		System.out.println("차량 : " + carName);
		System.out.println("연식 : " + released);
		System.out.println("색상 : " + color);
		System.out.println("주유량 : " + liiter);
		System.out.println("가격 : " + price);
	}

}
// CarMain.java

public class CarMain {

	public static void main(String[] args) {

		
		Car car = new Car(); // car: 인스턴스 변수 

		System.out.println(car); // car을 출력하면 car의 주소가 출력된다..

		car.carName = "그랜저";
		car.released = 2021;
		car.color = "검정색";
		car.maxSpeed = 230;
		car.liiter = 60;
		car.price = 50000000;

		car.printInfo();
	}

}
profile
더 좋은 개발자가 되기위한 과정

0개의 댓글