본문 바로가기
Java/Java이론

객체와 클래스

by P_eli 2023. 10. 21.
728x90
반응형

자바에서 객체를 만들려면 반드시 클래스를 먼저 만들어야 합니다.

 

먼저 객체에 대해 알아봅시다.

 

객체 란?

먼저 객체를 간단히 정의 하면 우리가 표현할 수 있는 모든 사물들을 객체(Object) 라고 부릅니다.

넓은 의미로 객체는 실세계에 존재하거나 생각할 수 있는 것을 뜻합니다.

 

예를들어 개, 고양이, 늑대 는 동물에 속합니다.

 

여기서 동물은 개념적인 객체 에 속하고 개,고양이, 늑대는 물리적인 객체를 속 합니다.

 

컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다.

 

클래스 란?

클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.

이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.

 

그런데 현실 객체를 프로그래밍에서 전부 묘사하기에는 데이터와 처리 동작이 너무 많아서 

어느 정도 특징적인 데이터와 동작으로 추려낼 필요성이 있습니다.

이렇게 특징적인 데이터와 처리 동작을 추려내는 과정을 추상화(abstraction) 라고 합니다.

 

추상화 란?

컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다.

 

객체지향 프로그래밍에서 추상화 는 객체에서 특징적인 속성과 행위를 추출하는 과정을 의미 하는데,

같은 대상으로 추상화를 하더라도 목적이나 원하는 기능에 따라 여러 추상화 모델이 생성될 수 있습니다.

객체 목적 구분 객체 구분 추상화된 클래스 모델
탈 것 개인, 이륜 자전거, 오토바이 Bike
대중교통 버스, 지하철 public transport
항공기 전투기, 헬리콥터, 경비행기 aircraft

 

추상화를 거친 클래스를 예제 코드 입니다.

// 클래스 정의 : 객체를 추상화 해놓은 것
class Marine
{
// 필드 : 데이터
    int attack;
    int hp;
    
    // 메서드 : 동작
    void Unit()
    {
	System.out.println("공격력 : " + attack);    
    	System.out.println("체력 : " + hp);
    }
}

 

객체와 클래스

클래스는 객체를 프로그래밍에서 사용하려고 추상화해서 만들어놓은 설계도 입니다.

그로므로 프로그래밍에서 사용하려면 설계도를 기초로 실체를만들 필요가 있습니다.

실체는 객체(Object)라고 하며, 실체화 하는 작업을

'객체(Object)를 생성한다' OR '인스턴스화 한다(instantiate) 등으로 말합니다.

 

소프트웨어 에서 객체는 클래스라는 설계도에 구현한 것을 메모리에 탑재해 메모리 주소를 부여하는 것을 말합니다.

  설계도   객체생성(인스턴스화)   실물
실생활 컴퓨터 설계도 -> 공장 -> (생성된)컴퓨터
프로그래밍 클래스 -> new -> (메모리에 적재된) 값

밑에 코드는 실제로 클래스를 객체로 만드는 코드 입니다.

 

// 클래스타입(Computer) 변수(myComputer) 객체생성(new)  생성자(Computer( );)
Computer myComputer = new Computer( );

 

간단한 예제코드로 알아봅시다.

class Human // 클래스 정의
{
	// 필드 : 데이터
	String name;
    String job;
    // 메서드 : 동작
    void say()
    {
    	System.out.println("안녕하세요.");
    }
}

public class HumanUse
{
	public static void main(String[] args)
    {
    	// 클래스를 이용해 객체 생성
        // Human 이라는 설계도(클래스)를 이용해 Human 객체 생성
        // 클래스 타입의 변수는 new를 통해 객체 생성
    	Human saram1 = new Human();
        // 필드 접근
        saram1.name = "철수"; // 멤버 변수에 직접 접근
        saram1.job = "안내사원"; // 멤버 변수에 직접 접근
        // 출력
        System.out.println("이름 : " + saram1.name + " \n" + "직업 : " + saram1.job);
        // 메서드 호출
        saram1.say();
    }
}

 

728x90
반응형

'Java > Java이론' 카테고리의 다른 글

클래스의 상속  (1) 2023.10.29
스태틱  (0) 2023.10.26
접근 제한자  (0) 2023.10.25
생성자  (1) 2023.10.25
오버로딩  (0) 2023.10.23