[Java의 정석] 클래스와 객체

younghyun·2022년 7월 5일
0

Java의 정석

목록 보기
5/12
post-thumbnail

클래스와 객체의 정의와 용도

클래스란 '객체를 정의해놓은 것'으로, 객체를 생성하는데 사용된다.

객체란 '실제로 존재하는 것'으로, 프로그래밍에서는 '클래스에 정의된 내용대로 메모리에 생성된 것'을 뜻한다.

  • 클래스를 작성한 다음, 클래스로부터 객체를 생성하여 사용한다.
    • why? : 매번 객체를 생성할 때마다 고민하지 않고 클래스로부터 객체를 생성하여 사용하기만 하면 된다.

객체와 인스턴스

클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.

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

클래스에는 객체의 모든 속성과 기능이 정의되어있다.

  • 속성 - 멤버 변수(member variable), 필드(field)
  • 기능 - 메서드(method), 함수(function)

인스턴스의 생성과 사용

인스턴스는 참조변수를 통해서만 다룰 수 있으며,
참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

class Tv {
    
    // Tv의 속성 (멤버 변수)
    String color;
    boolean power;
    int channel;
    
    // Tv의 기능 (메서드)
    void power() {         // Tv 전원 on, off하는 기능의 메서드
        power != power;
    }
    
    void channelUp() {    // Tv 채널 높이는 기능의 메서드
        ++channel;
    }
    
    void channelDown() {   // Tv 채널을 낮추는 기능의 메서드
        --channel;
    }

class TvTest {
    public static void main(String args[]) {
    
        Tv t;         // Tv 클래스 타입의 참조변수 t를 선언 (Tv 인스턴스를 참조하기 위함)
        t = new Tv();    // Tv 인스턴스 생성, 생성된 객체의 주소값이 참조변수 t에 저장됨
        
        t.channel = 7;   // Tv 인스턴스의 멤버변수 channel에 7을 저장
        t.channelDown();  // Tv 인스턴스의 메서드 channelDown() 호출
        
        // 참조변수 t가 참조하고 있는 Tv 인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력
        System.out.println("현재 채널은 " + t.channel + "입니다.");

객체 배열

객체 배열은 참조변수 배열이다. 객체 배열 안에는 객체의 주소가 저장된다.

// 1. 객체 배열 생성 후 객체 저장
Tv[] tvArr = new Tv[3];  // 객체 배열을 생성

// *주의* 객체를 생성해서 객체 배열의 각 요소에 저장해야 함
for (int i = 0; i < tvArr.length; i++) {
    tvArr[i] = new Tv();

// 2. 배열의 초기화
Tv[] tvArr = { new Tv(), new Tv(), new Tv() }

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

1. 클래스 - 데이터와 함수의 결합

객체지향언어에서는 변수(데이터)와 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 했다. 따라서 변수와 함수가 서로 유기적으로 연결되어 있어 작업이 간단하고 명료해졌다.

  • 변수 : 하나의 데이터를 저장할 수 있는 공간
  • 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
  • 구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
  • 클래스 : 데이터와 함수의 결합 (구조체 + 함수)

2. 클래스 - 사용자 정의 타입

클래스가 곧 사용자 정의 타입이다.

사용자 정의 타입 : 프로그래머가 직접 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것

profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글