본문 바로가기
Programming/Java

[Java] 7. 클래스와 객체 (Part 2)

by Rayched 2022. 11. 21.

0. 개요

https://rclogstorage.tistory.com/23

 

[Java] 7. 클래스와 객체 (Part 1)

0. 개요 우리가 프로그래밍을 하다보면 변수에 여러 값을 담아야하는 경우가 많다. 다만 변수에는 값을 하나만 담을 수 밖에 없으며, 변수와 값의 자료형이 다르면 값을 담을 수 없다. 그래서 고

rclogstorage.tistory.com

'클래스와 객체' Part 1에서 객체의 정의와 클래스의 정의 및 구성요소들에 대한 설명을 했었으니

이번에는 그때 정리했던 내용을 다시 복습한다는 느낌으로 예제 문제를 하나 만들고

이에 대한 설명을 하는 것 위주로 할 것이다.

예제로 제시한 문제는 다음과 같다.

//예제 문제
//조건: 자동차 객체를 만드시오.

public class Main {
    public static void main(String[] args){

    }
}

1. 문제 풀이

① 자동차 클래스 및 객체 생성

일단 제시된 문제의 조건을 살펴보자.

자동차 객체를 만들려면, 제일 먼저 필요한 것은 자동차 객체의 설계도

즉, 자동차 '클래스(class)'가 필요하다.

//예제 문제
//조건: 자동차 객체를 만드시오.

public class Main {
    public static void main(String[] args){

    }
}

class 자동차 {
	
}
//자동차 클래스 선언

자동차 class를 선언했지만, 자동차 객체를 만든 것이 아니다.

클래스는 객체를 만들기 위한 설계도이므로, 별도로 Main 클래스에서 자동차 객체를 만들어야 한다.

//예제 문제
//조건: 자동차 객체를 만드시오.

public class Main {
    public static void main(String[] args){
    	자동차 a자동차 = new 자동차();
        //자동차 객체 및 해당 객체를 참조하는
        //참조변수 a자동차 생성됨
    }
}

class 자동차 {
	
}
//자동차 클래스 선언

new 연산자에 의해 메모리에 '자동차' 객체가 하나 생성이 되고

해당 객체를 참조하는 참조 변수 'a자동차'도 같이 생성된다.

해당 변수는 객체가 가진 필드를 읽거나 수정하는 것이 가능하고

메소드를 실핼할 수 있기 때문에 일종의 리모콘으로 비유할 수 있다.


② 자동차 클래스 필드, 메소드 만들고 실행하기.

자동차는 차 종이나 차량 색깔, 생산 연도와 같은 고유의 정보를 가지고 있고

자동차를 달리게 하는 액셀과, 자동차를 정지시키는 브레이크도 존재한다.

여기서 차 종이나 색상, 생산 연도와 같은 자동차가 가진 고유의 속성과 같은 것들을

자바에서는 '필드(field)'라고 한다.

 

필드는 읽거나 쓰는 것은 가능하지만, 실행을 시킬 수는 없다.

객체를 하나의 폴더로 가정하자면, 필드는 '.txt'(텍스트 파일)이라고 생각하면 된다.

텍스트 파일은 읽기나 쓰기는 가능하지만 이를 실행할 수는 없기 때문이다.

 

그러면 자동차의 기능에 속하는 액셀이나 브레이크는 자바에서는 무엇이라고 칭할까?

자바에서는 자동차, 객체의 기능이나 행동에 속하는 것들을 '메소드(method)'라고 한다.

객체라는 폴더에서 필드가 텍스트 파일과 같다면

메소드는 '.exe' 파일과 같다. 읽기나 쓰기는 안되지만 실행은 가능하기 때문이다.

 

그럼 이제 이를 앞에서 작성한 코드에 반영을 해보자.

//예제 문제
//조건 1: 자동차 객체 생성
//조건 2: 자동차의 필드, 메소드 선언하고 이를 수정 및 실행해보기.

public class Main {
    public static void main(String[] args){
    	자동차 a자동차 = new 자동차();
        a자동차.ModelName = "람보르기니";
        a자동차.ModelColor = "주황색";
        a자동차.Production_Year = 2012;
        a자동차.MaxSpeed = 300;
        
        a자동차.Accel();
    }
}

class 자동차 {
	String ModelName;
	String ModelColor;
	int Production_Year;
	int MaxSpeed;

	void Accel(){
	  System.out.println("자동차가 달립니다.");
	}
	
	void Break(){
	  System.out.println("자동차가 정지합니다.");    
	}
}

프로그램 실행 결과

해당 프로그램을 실행하면, 위와 같은 문장이 출력되는 것을 확인할 수 있다.

왜 이런 결과가 나왔는 지를 생각해볼 필요가 있다.

 

(1). 자동차 객체의 필드 (field)

자동차 클래스의 필드

앞에서 객체라는 하나의 폴더가 있다면 필드는 일종의 텍스트 파일이라고 설명했었다.

근데 사실 필드는 클래스에 포함된 변수이다.

변수라는 것은 값의 수정이 가능하지만 실행은 할 수 없다.

이러한 점에서 좀 더 이해하기 쉽게 설명하기 위해서 필드를 텍스트 파일에 비유한 것이다.

앞 장에서 클래스를 통해서 생성된 객체, 인스턴스들은 독립된 메모리 공간에 자기만의 필드를 가진다고 설명했었다.

왜냐하면 객체 하나가 가지고 있는 변수의 값을 Main class에서 수정할 수 있기 때문에

모든 객체의 변수 값을 동일하게 입력하지 않는 이상, 자기만의 필드를 가지게 되는 것이다.

자동차 객체가 가진 변수 값을 입력한다.

참조 변수 a자동차를 통해서 자동차 객체의 변수 값을 위와 같이 수정할 수 있다.

위의 값들은 a자동차 리모콘과 연결된 자동차 객체에만 적용된다.

다른 자동차 객체에는 같은 값을 입력하지 않는 이상, 변수의 값이 중복되지 않을 것이다.

 

(2). 자동차 객체의 메소드 (method)

자동차 클래스의 메소드

객체라는 폴더에서 필드가 일종의 텍스트 파일이라면

메소드는 실행 파일로 비유할 수 있다.

메소드의 구조를 보면 알겠지만, 메소드는 클래스에 포함된 함수이다.프로그래밍에서 함수의 정의는

"하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합."

이라고 할 수 있다.함수에 대한 것은 아직 정리가 되지 않았기 때문에 여기서는 정의만 간략하게 알아보고추후에 더 자세히 정리해서 글을 남겨보겠다.

a자동차 변수를 통해서 자동차 객체의 메소드를 실행함

객체, 인스턴스는 독립된 메모리 공간에 자신만의 고유한 필드를 가지지만메소드는 모든 인스턴스가 공유한다.자동차 클래스를 통해 생성된 객체의 메소드, 함수는 Main class에서 a자동차라는 참조 변수, 리모컨을 통해서 실행할 수 있지만해당 함수의 내용은 자동차 class에서만 수정할 수 있다.


③ 자동차 객체 2개 생성

마지막으로 자동차 객체 2개를 만들고 서로 다른 필드 값을 입력하고입력한 값을 Console 창에 출력하게 한 다음하나는 Accel 메소드를, 다른 하나는 Break 메소드를 실행하게끔 해보겠다.

//예제 문제
//조건 1: 자동차 객체 생성
//조건 2: 자동차의 필드, 메소드 선언하고 이를 수정 및 실행해보기.

public class Main {
    public static void main(String[] args){
    	자동차 a자동차 = new 자동차();
        a자동차.ModelName = "람보르기니 우라칸";
        a자동차.ModelColor = "주황색";
        a자동차.Production_Year = 2014;
        a자동차.MaxSpeed = 325;
        a자동차.Status(); 
        a자동차.Accel();
        
        System.out.println("===================="); //구분선
        
        자동차 b자동차 = new 자동차();
        b자동차.ModelName = "아우디 R8";
        b자동차.ModelColor = "하얀색";
        b자동차.Production_Year = 2006;
        b자동차.MaxSpeed = 302;
        b자동차.Status();
        b자동차.Break();
    }
}

class 자동차 {
	String ModelName;
	String ModelColor;
	int Production_Year;
	int MaxSpeed;
	
	void Accel(){
	  System.out.println("람보르기니 우라칸이 출발합니다.");
	}
	
	void Break(){
	  System.out.println("아우디 R8이 정지합니다.");    
	}
	
	void Status(){
	  System.out.printf("차 종: %s\n", ModelName);
	  System.out.printf("차 색상: %s\n", ModelColor);
	  System.out.printf("생산 연도: %d년 \n", Production_Year);
	  System.out.printf("최대 속도: %dkm/h \n", MaxSpeed);
    }
}

프로그램 실행 결과


2. 마치며

지금까지 티스토리에 업로드했던 자바에 대한 게시글들은

필자가 학원을 다니면서 들었던 자바 강의 내용을 기반으로 해서

부족하거나 보충이 필요한 부분들은 인터넷에 있는 자료들을 참고해서 메모장에 정리하고

이를 티스토리 블로그에 올리는 식으로 했었다.

다만 앞으로 이 방식대로 안한다거나 하지는 않고,

앞으로도 계속 학원에서 배웠던 강의를 기반으로 해서 티스토리에 올릴 예정이다.

 

지금까지 작성한 글의 제 1의 독자는 현재 혹은 미래의 나 자신을 대상으로 작성한 것이지만

자바를 공부하는 다른 누군가에게 내가 썼던 글들이 도움이 된다면 나름대로 괜찮을 수도 있다고 생각한다.

 

사용했던 개발 프로그램

데스크탑: IntelliJ

태블릿: Java N-IDE

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

[Java] 8. Scanner  (0) 2022.12.04
[Java] 함수, 메소드  (0) 2022.11.30
[Java] 7. 클래스와 객체 (Part 1)  (0) 2022.10.28
[Java] 6. 배열 (Part 2)  (0) 2022.10.19
[Java] 6. 배열 (Part 1)  (0) 2022.10.19