본문 바로가기
프로그래밍 언어/자바

자바 클래스와 객체 #1

by 블루데이제이 2022. 9. 11.
728x90
반응형
클래스와 객체, 객체지향 프로그래밍은 서로 떼어낼 수 없어서
클래스와 객체는 끊임없이 나옵니다.

객체 지향 언어

객체지향 프로그래밍을 설명하기 전에 절차 지향 프로그래밍을 알아야 합니다.

절차 지향 프로그래밍

절차 지향 프로그래밍(언어)는 아래와 같이 설명하고 있습니다. 참고하시길 바랍니다.

https://terms.naver.com/entry.nhn?docId=833608&cid=42344&categoryId=42344 

 

절차 지향 언어

컴퓨터에서 연산, 대입, 판단, 입출력, 실행 순서 등의 기본적인 처리를 쉽게 기술할 수 있고, 그런 실행 순서(절차)를 지정해서 프로그램을 작성하기 위한 프로그래밍 언어로 COBOL, FORTRAN, PL/Ⅰ

terms.naver.com

쉽게 말해 자동차를 조립한다고 가정하겠습니다.

자동차 뼈대 위에 엔진을 올리고 보닛을 올리고 핸들과 의자를 올리고 각종 계기판을 조립하고 바퀴를 조립하고 껍데기를 씌우고 차 문을 달고 도색을 하는 순서가 있다고 하겠습니다.

절차 지향은 이 순서가 하나라도 바뀌면 안 됩니다. 또, 조립과정에서 부품이 고장 나면 교체도 안됩니다. 상당히 비효율적이며 비생산적입니다.

 

객체 지향 프로그래밍

절차 지향 프로그래밍이 로직 중심으로 프로그래밍 되었다면, 객체 지향은 프로그래밍의 클래스를 중심으로 되어 있습니다. 즉, 자동차 조립 시 순서와 상관없이 각각의 기능 동작이 중요합니다.

 

클래스

클래스란 객체의 특징이나 성질을 나타내는 변수와 이 변수를 제어할 수 있는 메소드로 이루어진 객체의 명세서입니다. 더 쉽게 말해 교실이라는 클래스에 학생이라는 객체가 있고 학생 이름, 학생 나이, 학생 성별과 같은 변수가 있고 학생의 전체수, 남학생의 수, 여학생의 수, 결석한 학생의 수 같은 메소드로 이루어진 것입니다.

 

객체의 생성과 사용

객체를 프로그래밍에서 사용하기 위해서는 다음과 같은 단계를 거칩니다.(물론, 주관적인 생각입니다.)

1. 객체의 내용을 분석하여 모델링 합니다.

2. 모델링 된 객체의 내용을 토대로 클래스를 만듭니다.

3. 만들어진 클래스를 이용하여 객체를 생성하고 사용합니다.

객체 분석(모델링)

이용하고자 하는 객체를 정확히 분석하고 분석된 내용으로 클래스를 만듭니다.

자동차를 예로 들겠습니다. 자동차는 다음과 같은 특성을 알 수 있습니다.(물론, 모든 특성을 말하는 건 아닙니다.)

1. 제조사

2. 제작연도

3. 색상

4. 마력

5. 토크

6. 가격

...

기타 등등

 

클래스 생성

위에서 언급한 특성을 이용하여 자동차 클래스를 정의합니다. 클래스를 만들 때는 객체의 특성 변수를 설정하고 접근할 수 있는 메소드를 정의하여 수행할 수 있습니다.

class Vehicle{
}

■필드 정의

여기에서는 제조사, 제조 연도, 색상, 가격 특성만 정의하도록 하겠습니다.

객체의 특성을 나타낼 수 있는 변수를 선언합니다.

class Vehicle{
    String strMaker;
    String strMakeDate;
    String strColor;
    int intAmount;
}

■ 메소드 정의

객체의 변수를 만들고 필드를 이용할 수 있는 메소드를 만듭니다.

아래의 예제는 자동차 제조사를 설정하고 알아낼 수 있는 메소드를 정의한 것입니다.

public String getStrMaker(){
    return strMaker;
}

public void setStrMaker(String strMaker){
    this.strMaker = strMaker;
}

▶ 접근 제한자

외부 클래스에서 이 메소드를 접근할 수 있는 권한을 설정하는 것입니다. public 이란 모든 클래스에서 이 메소드를 접근할 수 있습니다.

 

◆ 접근 제한자의 종류

private 매우 엄격한 제한자로 자신의 클래스 내부에서만 사용 가능합니다.
protected private와 비슷하나 자신의 클래스와 상속받은 하위 클래스, 동일한 파일 내부, 동일한 폴더에서만 사용 가능합니다.
public 객체가 선언되어 있는 곳이라면 사용 가능합니다.
package 제한자를 사용하지 않을 때 나타내며 자신의 클래스 내부와 동일한 패키지들 간, 동일한 폴더에서만 사용 가능합니다.

예제를 통해서 클래스 생성, 필드와 메소드를 만들어 봅시다.

 

이클립스 실행하고 Vehicle.java 파일을 만듭니다.

※ Modifiers의 package를 선택합니다. 상단에 있는 Package와 다른 개념입니다.

class Vehicle {
	String strMaker;
	String strMakeDate;
    String strColor;
    int intAmount;    
	public String getStrMaker() {
		return strMaker;
	}
	public void setStrMaker(String strMaker) {
		this.strMaker = strMaker;
	}
	public String getStrMakeDate() {
		return strMakeDate;
	}
	public void setStrMakeDate(String strMakeDate) {
		this.strMakeDate = strMakeDate;
	}
	public String getStrColor() {
		return strColor;
	}
	public void setStrColor(String strColor) {
		this.strColor = strColor;
	}
	public int getIntAmount() {
		return intAmount;
	}
	public void setIntAmount(int intAmount) {
		this.intAmount = intAmount;
	}   
}

상단의 변수를 입력한 후 Alt+Shift+S를 누르면 메소드의 getter&setter를 만들 수 있는 팝업이 뜹니다.

그러면 자동으로 get, set 메소드를 생성해 줍니다.

클래스를 만들 때 외부 클래스에서 클래스 내부의
필드(변수)에 직접적으로 접근하는 것은
바람직하지 않습니다.

그래서 클래스의 필드 즉, 변수의 앞에 private 접근 제한자를 처리합니다.

 

class Vehicle {
	private String strMaker;
	private String strMakeDate;
    private String strColor;
    private int intAmount;    
	public String getStrMaker() {
		return strMaker;
	}
	public void setStrMaker(String strMaker) {
		this.strMaker = strMaker;
	}
	public String getStrMakeDate() {
		return strMakeDate;
	}
	public void setStrMakeDate(String strMakeDate) {
		this.strMakeDate = strMakeDate;
	}
	public String getStrColor() {
		return strColor;
	}
	public void setStrColor(String strColor) {
		this.strColor = strColor;
	}
	public int getIntAmount() {
		return intAmount;
	}
	public void setIntAmount(int intAmount) {
		this.intAmount = intAmount;
	}   
}

 

 

객체의 생성과 사용

Vehicle이라는 클래스를 생성하였습니다. 만들어진 Vehicle 클래스의 객체를 생성하고 이것을 사용하는 방법을 알아보겠습니다.

이클립스에서 Car.java를 생성합니다.

class Car {
	public static void main(String[] args) {
		Vehicle vehicle = new Vehicle();
	}
}

소스 코드처럼 입력합니다. Vehicle 클래스를 이용하기 위해서는 먼저 Vehicle 클래스의 객체를 생성해야 합니다. 객체의 생성은 new 문을 이용하여 수행할 수 있습니다.

 

class Car {
	public static void main(String[] args) {
		Vehicle vehicle = new Vehicle();
		
		vehicle.setStrMaker("현대자동차");
		vehicle.setStrMakeDate("2020-07-02");
		vehicle.setStrColor("빨강");
		vehicle.setIntAmount(3000);
		
		System.out.println("구입한 자동차는 " + vehicle.getStrMaker());
		System.out.println("구입 일자는 " + vehicle.getStrMakeDate());
		System.out.println("색상은 " + vehicle.getStrColor());
		System.out.println("가격은 " + vehicle.getIntAmount() + "만원");
	}
}

Car 클래스에서 Vehicle 클래스의 필드와 메소드를 사용하기 위해서 Vehicle 클래스를 vehicle로 객체 생성하고 Vehicle 클래스의 변수값에 대입을 합니다. 여기서 중요한 것은 Vehicle 변수에 직접 접근하지 않고 getter&setter로 대입하고 값을 가져옵니다.

이클립스에서 객체(vehicle) 다음에 쩜(.)을 누르면 객체의 필드와 메소드 목록이 나옵니다. 거기에서 선택해서 get 또는 set을 하는 데, Vehicle 클래스에서 private으로 선언된 필드는 나오지 않는 것을 확인할 수 있습니다.

 

728x90
반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

자바 클래스와 객체 #3  (0) 2022.09.11
자바 클래스와 객체 #2  (0) 2022.09.11
[자바] for문을 이용한 삼각형 만들기  (0) 2022.09.09
[자바] 구구단 만들기  (0) 2022.09.09
자바 기본 입출력  (0) 2022.09.09