언어(Programming Language)/Java

[Java] Class 개념 및 사용법

RyanSin 2021. 1. 24. 01:12
반응형

- 개요

안녕하세요. 이번 시간에는 자바에서 제일 어려운 개념인... Class(클래스)에 대해 알아보겠습니다.

 

일단 Class란 무엇일까요?? 딱 머릿속에 생각나는 게 없네요... 등급인가?... 반인가?... 학급을 말하는 건가?.. 이런 생각도 드네요 허허...

 

국어사전에 검색해보면...

 

 

정말 국어사전에서 설명한 말이 너무 어렵죠...?

근데 위 사전을 잘 풀어 해석하면 "데이터와 메서드를 정리한 객체를 정의한 것" , "객체를 정리하고 다룬다." 

 

그럼 여기서 객체는 무엇일까요?? 다시 국어사전에 검색을 해보겠습니다.

 

 

말이 너무 길고... 또 뭔 소리 하는 건지 모르겠죠?...ㅋㅋ

 

하지만 우리는 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)을 기억하면 됩니다.

 

그러면 데이터?? 실체란 무엇일까요? 여기서 우리는 실체라는 단어를 잘 이해해야 합니다. 

 

실체란 "실제의 물체"라는 뜻입니다. 국어사전 설명에는 "손님, 역무원" 모두가 실체화된 객체라는 뜻입니다.

 

(여기서 동작을 객체라고 설명하고 있는데 헷갈리시면 안 됩니다. "승차권 주문"은 객체라고 볼 수 없습니다. 동작은 객체가 하는 행위입니다.

 사람이 승차권을 주문하는 행동은 메서드입니다. 헷갈리시면 안 됩니다!!.)

 

즉!! 우리 일상에서 보이는 모든 사물은 실체이고 그것들은 모두 객체입니다.

 

그럼 클래스는 무엇일까요??  "데이터와 메서드를 정리한 객체를 정의한 것" , "객체를 정리하고 다룬다"라고 설명했는데

 

클래스를 비유하자면 "설계도"라고 표현할 수 있겠습니다. 예시를 하나 들어보겠습니다.

 

Ex) 자동차

요즘 다들 전기차, 수소차, 자율주행차 등등 자동차에 대해 많은 이슈들이 있습니다.

 

이런 엄청난 자동차들을 만들어 내려면 제일 먼저 어떻게 만들지 "설계"를 합니다. 그리고 설계를 바탕으로 "설계도"를 만듭니다.

 

그럼 이 설계도를 가지고 공장에서는 자동차를 대량으로 생상 합니다. 

 

자 여기서 설계도 => 클래스, 자동차 => 객체 이렇게 됩니다.

 

(이해가 되지 않으신 분들은 댓글을 남겨주시면 친절히 답글 남기겠습니다.)

 

- 사용법

하나의 Class를 만들고 설명을 하겠습니다.

 

//Car.java 파일
package com.company;

public class Car {

}



//Main.java 파일
package com.company;

public class Main {

    public static void main(String[] args) {
    
  	   Car car = new Car(); // Car Class 생성
    
    }
}

Car.java 파일을 하나 만들어 그 안에 Car라는 클래스를 작성했습니다.

 

그런 다음 Java가 실행되는 Main.java 파일에 Car 클래스 생성했습니다.

 

우리는 설계도를 만들고 자동차를 생성 했습니다. (머지... 이게 다인가?... 네... 정말 다입니다.)

 

기본 클래스를 만들어 봤습니다. 그럼 이제 자동차 클래스 꾸며 보도록 하겠습니다.

 

//Car.java 파일
package com.company;

public class Car {

    String name; // 자동차 이름
    String color; // 자동차 색상
    String type; // 자동차 종류(SUV 세단... 등등)
    String engine; // 자동차 엔진 (가솔린, 경유, 하이브리드 등등)
    String date; // 자동차 생성 날짜
    
}



//Main.java 파일
package com.company;

public class Main {

    public static void main(String[] args) {
    
        //한국 시간으로 오늘 날짜 구하는 코드
        SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy.MM.dd", Locale.KOREA );
        Date currentTime = new Date ();
        String today = mSimpleDateFormat.format ( currentTime );


        Car avante = new Car(); //Car Class 생성
        avante.name = "아반떼";
        avante.color = "화이트";
        avante.type = "세단";
        avante.engine = "카솔린";
        avante.date = today;

        System.out.println("---- 실행결과 ----");
        System.out.println(avante.name);
        System.out.println(avante.color);
        System.out.println(avante.type);
        System.out.println(avante.engine);
        System.out.println(avante.date);
    
    }
}

 

Car 클래스에 이름, 색상, 종류, 엔진, 생성 날짜라는 속성을 정의했습니다.

 

그리고 Car 클래스 객체를 만들고 속성 값을 설정했습니다. 결과 콘솔 화면을 확인해 볼까요~

 

속성 값이 잘 적용된 걸 확인할 수 있습니다.

 

그런데... 먼가 아쉽죠?... 저렇게 사용하게 되면... 새로운 Car 객체를 만들 때마다 코드 라인이 길어질 겁니다...

 

이 방법을 해결하는 방법이 있습니다. 그것은 바로 "생성자"라는 개념이 있습니다. 바로 적용해보겠습니다.

 

생성자 => new Class("초기값 설정") 아래 코드를 보면 바로 이해가 가실 겁니다. 

 

//Car.java 파일
package com.company;

public class Car {

    String name; // 자동차 이름
    String color; // 자동차 색상
    String type; // 자동차 종류(SUV 세단... 등등)
    String engine; // 자동차 엔진 (가솔린, 경유, 하이브리드 등등)
    String date; // 자동차 생성 날짜

    //생성자
    public Car(String name, String color, String type, String engine, String date) {
        this.name = name;
        this.color = color;
        this.type = type;
        this.engine = engine;
        this.date = date;
    }
}



//Main.java 파일
package com.company;

public class Main {

    public static void main(String[] args) {
    
        //한국 시간으로 오늘 날짜 구하는 코드
        SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy.MM.dd", Locale.KOREA );
        Date currentTime = new Date ();
        String today = mSimpleDateFormat.format ( currentTime );


        //초기 값 설정
        Car avante1 = new Car("아반떼", "화이트","세단", "가솔린", today); //Car Class 생성
        Car avante2 = new Car("아반떼", "블루","세단", "LPG", today); //Car Class 생성
        Car avante3 = new Car("아반떼", "블렉","세단", "가솔린", today); //Car Class 생성

        System.out.println("---- 실행결과 avante1 ----");
        System.out.println(avante1.name);
        System.out.println(avante1.color);
        System.out.println(avante1.type);
        System.out.println(avante1.engine);
        System.out.println(avante1.date);

        System.out.println("---- 실행결과 avante2 ----");
        System.out.println(avante2.name);
        System.out.println(avante2.color);
        System.out.println(avante2.type);
        System.out.println(avante2.engine);
        System.out.println(avante2.date);

        System.out.println("---- 실행결과 avante3 ----");
        System.out.println(avante3.name);
        System.out.println(avante3.color);
        System.out.println(avante3.type);
        System.out.println(avante3.engine);
        System.out.println(avante3.date);
        
        /**
         * 실행 결과
         * ---- 실행결과 avante1 ----
         * 아반떼
         * 화이트
         * 세단
         * 가솔린
         * 2021.02.15
         * ---- 실행결과 avante2 ----
         * 아반떼
         * 블루
         * 세단
         * LPG
         * 2021.02.15
         * ---- 실행결과 avante3 ----
         * 아반떼
         * 블렉
         * 세단
         * 가솔린
         * 2021.02.15
         */
    
    }
}

 

생성자는 클래스를 new 키워드를 통해 생성할 때 초기 값을 설정하는 기술입니다.

 

처음 보는 this 키워드는 자바에서 클래스 자기 자신을 가리키는 겁니다.

 

즉, Car 클래스에 this 는 Car 자신이며 this.name은 자신의 속성 name을 뜻 합니다.

 

- 다른 생성자 만들기

//Car.java 파일
package com.company;

import java.util.Date;

public class Car {

    String name; // 자동차 이름
    String color; // 자동차 색상
    String type; // 자동차 종류(SUV 세단... 등등)
    String engine; // 자동차 엔진 (가솔린, 경유, 하이브리드 등등)
    String date; // 자동차 생성 날짜
    Date scrapped; // 페차 날짜

    //생성자
    public Car(String name, String color, String type, String engine, String date) {
        this.name = name;
        this.color = color;
        this.type = type;
        this.engine = engine;
        this.date = date;
    }

    //생성자 2
    public Car(String name, String color, String type, String engine, Date scrapped ) {
        this.name = name;
        this.color = color;
        this.type = type;
        this.engine = engine;
        this.scrapped = scrapped;
    }

    //생성자 3
    public Car(String name, String color, String type, String engine, String date, Date scrapped ) {
        this.name = name;
        this.color = color;
        this.type = type;
        this.engine = engine;
        this.date = date;
        this.scrapped = scrapped;
    }
}


//Main.java 파일
package com.company;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {

        //한국 시간으로 오늘 날짜 구하는 코드
        SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy.MM.dd", Locale.KOREA );
        Date currentTime = new Date ();
        String today = mSimpleDateFormat.format ( currentTime );


        //초기 값 설정
        Car avante1 = new Car("아반떼", "화이트","세단", "가솔린", today); //Car Class 생성자1
        Car avante2 = new Car("아반떼", "블루","세단", "LPG", currentTime); //Car Class 생성자2
        Car avante3 = new Car("아반떼", "블렉","세단", "가솔린", today, currentTime); //Car Class 생성자3

        System.out.println("---- 실행결과 avante1 ----");
        System.out.println(avante1.name);
        System.out.println(avante1.color);
        System.out.println(avante1.type);
        System.out.println(avante1.engine);
        System.out.println(avante1.date);

        System.out.println("---- 실행결과 avante2 ----");
        System.out.println(avante2.name);
        System.out.println(avante2.color);
        System.out.println(avante2.type);
        System.out.println(avante2.engine);
        System.out.println(avante2.scrapped);

        System.out.println("---- 실행결과 avante3 ----");
        System.out.println(avante3.name);
        System.out.println(avante3.color);
        System.out.println(avante3.type);
        System.out.println(avante3.engine);
        System.out.println(avante3.date);
        System.out.println(avante2.scrapped);

        /**
         * 실행 결과
         *
         * ---- 실행결과 avante1 ----
         * 아반떼
         * 화이트
         * 세단
         * 가솔린
         * 2021.02.15
         * ---- 실행결과 avante2 ----
         * 아반떼
         * 블루
         * 세단
         * LPG
         * Mon Feb 15 21:51:47 KST 2021
         * ---- 실행결과 avante3 ----
         * 아반떼
         * 블렉
         * 세단
         * 가솔린
         * 2021.02.15
         * Mon Feb 15 21:51:47 KST 2021
         */

    }
}

 

다른 생성자를 사용하게 된다면 파라미터 개수와 타입을 변경해서 새롭게 만들어서 사용할 수 있습니다. :)

 

다음 시간에는 메서드에 대해 알아보겠습니다. :) 감사합니다.