[자바 독학 1. 자바의 신 with InteliJ] 3. 객체, 클래스, 인스턴스, 생성자

2024. 2. 29. 20:47Programming Language/Java

반응형

 

반응형

2024.02.28 - [Programming Language/Java] - [자바 독학 1. 자바의 신 with InteliJ] 1. 프로그래밍이란?

2024.02.29 - [Programming Language/Java] - [자바 독학 1. 자바의 신 with InteliJ] 2. 자바 환경 준비 및 실행

자바는 객체지향(OOP, Object Oriented Prgraming) 언어이다!

객체 지향은 프로그램을 객체와 그 상호작용으로 작성하는 방식이다. 객체는 무엇일까?

Class, Object(객체), Instance(인스턴스)

Class

클래스는 객체를 프로그램으로 나타내기 위한 설계도(코드)이다. 조금 더 관념적으로 표현하자면

객체를 Class를 통해 추상적으로 구현한다.

  • 추상 : 컴퓨터 공학과 개발의 영역에서는 추상(Abstraction)은 복잡한 실제의 무엇을 단순하게 표현하는 것이다. 자료구조(DS)에서 등장하는 추상자료형과도 비슷한 맥락이다. 하지만, 자료구조의 추상자료구조는 자료구조와 그에 대한 연산들을 명기한 것으로 실제로는 구현되지 않은 인터페이스의 형태이기에 조금 다른 성격으로 생각할 수 있다.
  • 구현(Implementation): 추상화된 개념을 실제 코드로 구현하는 것, 클래스에 정의된 속성과 메소드를 실제로 작성하는 과정을 포함한다. 이후 등장할 인터페이스에서 구현/구현체는 어떤 클래스가 인터페이스를 실제 구현함을 이르기도 한다.

클래스는 상태(Attributes)와 행동(Methods)을 갖는다.

  • 상태 : 변수; 표현하기 위한 무엇인가를 저장하는 것
  • 메소드(행동) : 다른 언어의 함수에 해당함

Object

  • 객체 : 실제 대상 혹은 어떠한 현상이나 상태

Instance

  • 인스턴스 : 클래스로부터 생성된 객체, 클래스의 구체적인 실현체, 객체가 메모리에 할당되어 실제로 생성된 것
public class Car {
    String model;
    String color;
    int[] location = new int[2];

    public Car(String model, String color) {
        this.model = model;
        this.color = color;
    }

    public void move(int x, int y) {
        location[0] = x;
        location[1] = y;
    }

    public void printNameModelLocation(String name) {
        System.out.println( name+" is " +this.model+ " : " + location[0] + ", " + location[1]);
    }

    public static void main(String[] args) {
        Car car1 = new Car("Rexton", "Black");
        car1.move(10, 20);
        car1.printNameModelLocation("car1");

        Car car2 = new Car("Sonata", "Red");
        car2.move(20, 30);
        car2.printNameModelLocation("car2");
    }

}

간단하게 자동차의 모델, 색상, 위치를 표현하는 클래스를 만들고 main() 메소드로 실행한다.

이때 클래스, 객체, 인스턴스는 다음과 같다.

  • 클래스 : Car
  • 인스턴스 : Car1, Car2
  • 객체 : 실제 검은색 렉스턴, 빨간색 소나타

그리고 클래스의 상태와 행위는 다음과 같다.

  • 상태: model, color, location
  • 행위: void move(int x, int y), printNameModelLocation(String name)

하지만 메소드처럼 생긴 녀석들 중 클래스와 이름이 같은 것이 있다. 이것은

생성자

이다.

앞서 객체가 메모리에 할당되어 실제로 생성된 것이 인스턴스라 했는데 이 인스턴스를 생성하는 것이 바로 생성자이다.

반응형