본문 바로가기
Develop/Java

클래스와 인스턴스

by 준팍(junpak) 2023. 4. 3.

객체 지향 이론의 관점

소프트웨어 객체는 현실 객체를 모방한 것이 아니라 은유를 기반으로 재창조한 것이다.

  • 현실 객체 : 객체
  • 은유 : 클래스
  • 소프트웨어 객체 : 인스턴스

객체

  • 사전적 정의 : 실제로 존재하는 것
    • “존재하는 것”은 사물 뿐만이 아니라 개념도 포함한다.
  • 객체는 속성과 기능의 집합이다.
    • 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
  • 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라고 한다.
객체의 속성 (property) = 멤버변수, 특성, 필드, 상태

객체의 기능 (function) = 메서드, 함수, 행위

 

클래스

  • 정의
    • 객체를 프로그램상에서 정의한 것
      • 그렇기 때문에 클래스에는 객체의 모든 속성과 기능이 정의되어있다.
    • 객체의 설계도 또는 틀
      • 소프트웨어 객체는 클래스를 통해 생성되기 때문이다.
    • 클래스는 객체 그 자체가 아니다.
      • 우리가 자동차의 설계도를 자동차라고 부르지 않는 것과 같은 이치다.

인스턴스

  • 정의 : 클래스에 정의된 내용대로 메모리에 생성된 소프트웨어 객체
  • 클래스의 인스턴스화 : 클래스로부터 객체를 만드는 과정
    • 인스턴스화 시, 클래스에 정의된 속성과 기능을 가진 인스턴스가 만들어진다.

인스턴스의 생성과 사용

클래스명 변수명;            // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명();    // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장
  • 생성
    • 참조 변수를 통해서만 다룰 수 있다. (메모리 공간 접근)
    • 참조변수의 타입은 인스턴스의 타입과 일치해야한다. (저장 공간 확보)
    • 선언
      • 변수 이름을 통해 할당된 메모리 공간에 접근 가능
      • 메모리 공간에 변수 타입에 맞는 크기의 저장 공간 확보
    • 초기화
      • 변수 선언으로 할당된 공간에 처음으로 값을 저장하는 행위
      • 일반적으로 선언과 동시에 초기화한다. (명시적 초기화)
  • 사용
    • 같은 클래스로부터 생성된 경우 (= 타입이 같은 경우)
      • 각 인스턴스의 멤버변수(속성) : 서로 다른 값 유지 가능
      • 메서드 : 모든 인스턴스의 메서드 내용 동일
    • 참조 변수에는 하나의 값(주소)만 저장될 수 있다.
      • 둘 이상의 참조변수가 하나의 인스턴스를 가리키는 것은 가능하다.
      • 하나의 참조변수로 여러 개의 인스턴스를 가르키는 것은 불가능하다.
      • 많은 수의 객체를 다뤄야할 땐, 객체배열을 사용하면 편리하다.

프로그래밍적인 관점에서의 클래스

  • 데이터와 함수의 결합
    • 서로 관련된 변수들과 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것
    • 데이터와 함수의 관계가 깊기 때문에 (= 함수는 주로 데이터를 가지고 작업한다.)
  • 사용자 정의 타입
    • 사용자 정의 타입
      • 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것
      • 객체지향언어에서는 클래스가 곧 사용자 정의 타입이다.

레퍼런스

'Develop > Java' 카테고리의 다른 글

추상 클래스와 인터페이스  (0) 2023.04.04
다형성  (0) 2023.04.04
제어자  (0) 2023.04.04
메서드 오버라이딩(Overriding)  (0) 2023.04.04
메서드 오버로딩 (Overloading)  (0) 2023.04.03