(Java programming) 클래스 / 인스턴스

soosoorim·2024년 2월 16일
0

Class 논리적인 부분의 개념

설치류, 포유류, 조류, 어류 등과 같이 공통된 형태나 행동 등으로 분류해 놓은 것

예 > 포유류
젖샘이 있다. (형태)
수유를 한다. (행동)

Class 기술적인 부분의 개념

변수와 메소드를 하나로 묶어 놓은 개념
Java 프로그래밍 언어의 근본 개념
모든 코드는 class로 작성이 되어야 한다.

형태는 변수로 표현한다. (멤버변수, 인스턴스필드)
행동은 메소드로 표현한다. (인스턴스메소드)

클래스와 인스턴스

  • 클래스는 객체지향프로그래밍에서 가장 중요한 개념
  • 객체지향프로그래밍 (OOP)
    수행 과제나 문제를 실세계의 객체로 표현해
    사람이 알기 쉽게 풀어나갈 수 있는 방법
  • 클래스
    존재할 수 있는 사물을 추상화 시켜놓은 개념
    Java에서는 Reference Type의 자료형에 해당한다.
  • 객체
    클래스를 변수로 만든 것을 의미
    일반적으로 객체는 “인스턴스” 라고 부른다.
    클래스를 인스턴스로 만드는 과정을 “인스턴스화“ 한다 라고 표현
  • 클래스를 인스턴스로 만드는 인스턴스화의 과정은
    “생성자 메소드"를 호출하는 것과 동일하다.

실세계에 존재하는 모든 질량이 있는 사물들은 두 가지로 표현이 가능하다.

  • 속성
  • 기능(행동)

속성이란, 사물이 가지는 여러 특성/특징 들을 말한다.
(자동차의 속성이라면)

  • 시동 여부
  • 속도

기능이란, 클래스(객체)가 할 수 있는 기능(행동)을 말한다.
(자동차의 속성이라면)

  • 시동버튼을 눌러 시동을 건다.
    엔진에 기본 동력이 제공되며 자동차가 출발할 준비를 한다.
  • 가속 페달을 밟는다.
    가속 페달을 밟는 만큼 엔진에 동력이 제공된다.
  • 브레이크 페달을 밟는다
    브레이크 페달을 밟으면 바퀴가 서서히 멈춘다.
  • 시동버튼을 눌러 시동을 끈다.
    엔진에 필요한 기본 동력을 제공하지 않아 자동차가 완전히 멈춘다.

클래스의 속성
“변수“ 로 정의
“멤버변수“ 혹은 “인스턴스 필드" 라고 부른다.


클래스의 기능
“메소드"로 정의
“인스턴스 메소드"라고 부른다.


멤버변수의 대상
인스턴스 메소드의 영향을 받는 변수들.
영향을 받지 않는 변수는 제거하거나 상수로 변경해야 한다.


일부 멤버변수는 메소드의 실행상태를 제어하기도 한다.
예를들어 시동이 꺼져 있을 때 가속페달을 누르면 아무 일도 일어나지 않아야 한다.

예 >

public class Car {
    boolean isEngineStart;
    int speed;
    public void pressEngineStartButton() {
        if (isEngineStart) {
            System.out.println("시동을 끕니다.");
            isEngineStart = false;
            speed = 0;
        }
        else {
            System.out.println("시동을 켭니다.");
            isEngineStart = true;
            speed = 10;
        }
    }
  • 멤버변수에 값을 할당하지 않음
    일반적인 지역변수는 반드시 값을 할당을 해야만 한다.
    하지만, 멤버변수는 값을 미리 할당하지 않아야 한다. (인스턴스마다 다른 값을 가지기 때문)
public static void main(String[] args) {
    Car car = new Car();
    car.pressEngineStartButton();
    car.pressGasolinPedal(10);
    car.pressBrakePedal(10);
    car.pressEngineStartButton();
}
  • 클래스를 변수로 사용하려면, 인스턴스로 만들어야 한다.
    new Car(); // Car 클래스를 인스턴스로 생성.

  • 인스턴스가 만들어지면 변수에 할당해야 사용할 수 있다.
    Car car = new Car(); // 인스턴스를 만들어 Car 타입의 car 변수에 할당.

  • Reference Type의 변수는 “인스턴스"라고 부르는데 Car 클래스는 Reference Type이므로 car 변수는 인스턴스이다.

  • Reference Type의 인스턴스는 Primitive Type에는 없는 특별한 점 연산자 (“ . ” )를 사용할 수 있다.

car.pressEngineStartButton(); // car 인스턴스의 pressEngineStartButton 메소드를 실행해라 라는 뜻

Reference Type?
Reference Type은 “메모리 참조타입” 을 말한다.
여러 변수들의 메모리 공간을 종류별로 묶어 그 주소를 참조

Primitive Type와 Reference Type의 차이점

Primitive Type
정해진 Byte크기 만큼 메모리를 할당
항상 값을 참조

Reference Type
여러 개의 Primitive Type과 여러 개의 Reference Type,
여러 개의 메소드를 사용하므로, 하나의 메모리로 사용할 수 없습니다.
항상 메모리 주소를 참조

Reference Type 메모리 참조 예시

JVM(Java Virtual Machine)의 메모리 구조

Car 클래스의 구조와 메모리

0개의 댓글

관련 채용 정보