개발 언어/Java

[Java] 클래스와 객체

나규태 2021. 8. 20. 16:33

1. 클래스

클래스란?

객체를 정의해 놓은 것이며 객체의 설계도 또는 틀이다. 이러한 설계도(클래스)는 여러 객체를 생성하는 데 사용된다.

클래스에는 변수와 메서드로 이루어있으며 변수는 데이터의 정의, 메서드는 특정 작업을 수행하기 위한 명령문의 집합이다.

 

객체의 사전적 의미는 실제로 존재하는 것이다.

객체 지향적 이론에서는 사물과 같은 유형적인 것뿐만 아니라 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.

 

  • 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념
  • 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
  • 유형의 객체 : 책상, 의자, 자동차와 같은 사물
  • 무형의 객체 : 수학 공식, 프로그램 에러와 같은 논리, 개념

2. 클래스와 객체의 관계

제품 설계도와 제품과의 관계와 같다.

제품 설계도에 의해 제품이 만들어지고 객체도 클래스에 의해 만들어진다.

잘 만들어진 하나의 제품 설계도로 여러 제품을 만들듯이 잘 만들어진 하나의 클래스로부터 객체를 생성하면 된다.

3. 객체와 인스턴스

인스턴스화 : 클래스로부터 객체를 만드는 과정

인스턴스 : 클래스로부터 만들어진 객체

객체 : 모든 인스턴스들을 대표하는 포괄적인 의미

Date date = new Date(); // 인스턴스화

// date : 인스턴스

4. 객체의 구성 요소 - 속성과 기능

객체는 속성, 기능 두 종류로 구성되며 속성과 기능의 집합니다.

일반적으로 다수의 속성과 다수의 기능을 갖추고 있다.

객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원, Member)라고 한다.

 

* 용어

  • 속성 : 멤버 변수, 특성, 필드, 상태
  • 기능 : 메서드, 함수, 행위
// Tv Class

// 속성 : 크기, 길이, 높이, 색상, 볼륨, 채널 등
// 기능 : 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등

public class Tv {
    private int size;
    private int width;
    private int height;
    private String color;
    private int channel;
    
    public turnOn() {}
    public turnOff() {}
    public volumeUp() {}
    public volumeDown() {}
    public channelChange() {}
}

5. 인스턴스의 생성과 사용

  1. Tv 클래스 타입의 참조 변수 t 선언 : Tv t
  2. Tv 인스턴스 생성 : new Tv();
  3. 생성된 Tv 인스턴스의 주소를 t에 저장 : Tv t = new Tv();
  4. 멤버 변수 변경 : t.channel = 7;
  5. 메서드 호출 : t.turnOn();

인스턴스는 위와 같이 참조 변수를 통해서만 컨트롤할 수 있다.

5.1. 인스턴스의 생성 구조

5.2. 두 개의 인스턴스

Tv t1 = new Tv(); // Ox100
Tv t2 = new Tv(); // Ox200

t2 = t1; // Ox200에서 Ox100을 참조

둘 이상의 참조 변수로 하나의 인스턴스를 가리킬 수 있지만 여러 개의 인스턴스를 하나의 참조 변수로 담지 못한다.

6. 객체의 배열

객체의 배열은 참조 변수를 하나로 묶은 참조 변수 배열이다.

객체의 배열 안에는 객체의 주소가 저장된다.

Tv[] tvArr = new Tv[3]; // 초기값 null

tvArr[0] = new Tv();
tvArr = {new Tv(), new Tv(), new Tv()};

객체 배열의 구조

7. 클래스의 또 다른 정의

7.1. 데이터와 함수의 결합

데이터 처리를 위한 저장 형태의 발전 과정

하나의 변수에서 여러 개의 같은 타입 변수를 담을 수 있는 배열을 만들고

배열에서 서로 다른 타입의 데이터를 넣을 수 있게 구조체를 만들고

구조체에 함수를 더해 클래스가 만들어진다.

7.2. 클래스 - 사용자 정의 타입 (user defined type)

프로그래머가 사용하기 위해 직접 만드는 Time 클래스 

class Time {
    private int hour;
    
    public setHour(int h) {
        this.hour = h;
    }
}