본문 바로가기
Java 배우기

What Is a Class? 클래스란 무엇인가?

by 노화방지 Anti-aging Hairstyle 2016. 1. 5.
반응형

클래스란 무엇인가?   What Is a Class?


현실 세계에서는 종류가 같은 많은 개별적인 객체를 종종 볼 수 있습니다.
제조업체와 모델이 같은 수천 대의 자전거가 있을 수 있습니다.
각 자전거는 동일한 세트의 설계도로 만들어졌기 때문에 동일한 구성요소를 포함하고 있습니다.
객체-지향 용어로, 사람들이 갖고 있는 개별 자전거는 자전거라는 객체(objects)의 클래스의 인스턴스(instance) 입니다.
클래스는 개별 객체가 생성되는 설계도입니다.

In the real world, you'll often find many individual objects all of the same kind. There may be thousands of other bicycles in existence, all of the same make and model. Each bicycle was built from the same set of blueprints and therefore contains the same components. In object-oriented terms, we say that your bicycle is an instance of the class of objects known as bicycles. A class is the blueprint from which individual objects are created.

아래 클래스 Bicycle은 자전거의 가능한 구현(implementation)의 하나입니다:

The following Bicycle class is one possible implementation of a bicycle:

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}


자바 프로그래밍언어의 구문규칙이 새로워 보이지만, 이 클래스의 설계는 앞서 공부한 자전거 객체에 기초하고 있습니다. 
cadencespeed 및 gear 필드는 객체의 상태를 나타내며, 메소드들(changeCadence, changeGearspeedUp 등)은 외부 세계와의 상호작용을 정의합니다.

클래스 Bicyclemain 메소드가 포함되어 있지 않음을 알 수 있습니다.
클래스 Bicycle은 완벽한 애플리케이션이 아니기 때문입니다;
이 클래스 Bicycle은 애플리케이션에서 사용될 수 있는 자전거들에 대한 설계도일 뿐입니다.
새로운 Bicycle 객체들을 만들어서 사용하는 것은 애플리케이션의 다른 클래스의 책임 입니다.

2개의 자전거 객체를 각각 생성하고 그들의 메소드를 호출하는 클래스 BicycleDemo는 다음과 같습니다:

The syntax of the Java programming language will look new to you, but the design of this class is based on the previous discussion of bicycle objects. The fields cadencespeed, and gear represent the object's state, and the methods (changeCadencechangeGearspeedUp etc.) define its interaction with the outside world.

You may have noticed that the Bicycle class does not contain a main method. That's because it's not a complete application; it's just the blueprint for bicycles that might be used in an application. The responsibility of creating and using new Bicycle objects belongs to some other class in your application.

Here's a BicycleDemo class that creates two separate Bicycle objects and invokes their methods:

class BicycleDemo { public static void main(String[] args) { // 2개의 서로 다른 Bicycle 객체를 생성함 Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); // 이들 객체들에 대한 메소드들을 Invoke 함 bike1.changeCadence(50); bike1.speedUp(10); bike1.changeGear(2); bike1.printStates(); bike2.changeCadence(50); bike2.speedUp(10); bike2.changeGear(2); bike2.changeCadence(40); bike2.speedUp(10); bike2.changeGear(3); bike2.printStates(); } }

이 테스트의 산출물은 2개의 자전거에 대한 최종 pedal cadence, speedgear를 인쇄합니다. 
The output of this test prints the ending pedal cadence, speed, and gear for the two bicycles:

cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

세상에는 같은 종류의 많은 독특한 객체들이 있습니다.
객체(object)들의 공통점들을 묶어놓은 게 class 입니다.
클래스는 객체를 만들기 위한 설계도 입니다.

홍길동, 김철수, 오바마, 김현수 이들 모두 객체라 할 수 있는데, 이들의 공통점은 이들이 모두 사람이라는 사실입니다.

따라서 사람이라는 class를 만들 수 있습니다.


사람 말고 자동차, 자전거, 말, 가마, 인력거, 비행기 등도 하나의 클래스로 표현할 수 있습니다.

이들 모두 사람이 이동수단으로 활용할 수 있다는 공통점을 갖고 있기 때문에 이동수단이라 클래스를 만들 수 있습니다.


클래스라는 것은 실제 사물을 프로그램에 적용하기 위해서 '추상화' 라는 작업을 통해서 만들어집니다.

아래는 객체의 field의 선언방법과 사용방법을 알아봅니다.


객체이름:

상태:       반지름  --------------> field로 선언되어야 할 부분

동작:      면적을 구한다


이렇게 정의된 class를 소스로 나타내 본니다.


public class Circle {

double radius;                         // field

Circle(double radius){

this.radius = radius;        // 생성자

}

double getArea(){                    // 메소드

double area; // 로컬 변수

area = radius * radius * 3.14;

return area;

}

}



이런 식으로 field를 선언할 뿐만 다른 종류의 변수들도 선언할 수 있습니다.

생성자의 radius라는 파라미터 변수, getArea method안에 area라는 로컬 변수가 있습니다.

이렇듯 변수는 선언 위치에 따라 변수 이름도 다르지만 사용할 수 있는 범위도 서로 다릅니다.


field의 사용 범위


파라미터 변수는 해당 생성자나 method 안에서만 사용 가능하고, 로컬변수는 선언된 위치부터 method의 끝 또는 선언된 블록의 끝까지 사용할 수 있지만, field는 같은 class 내에서라면 순서에 상관없이 생성자나 method 안에서 얼마든지 사용할 수 있습니다.


field는 class 외부에서도 사용할 수 있습니다.


public class Cirtest {

public static void main(String args[]){

Circle obj = new Circle(0.0);

obj.radius = 5.0;

double area = obj.getArea();

System.out.println(obj.radius);

System.out.println(area);

}

}


이런 식으로 field를 선언한 class 외부의 다른 class에서도 사용할 수 있습니다.

하지만 이런 식으로 외부에서 접근하는 것을 막을 수도 있습니다.

바로 접근 제어 제한자(access control modifier) 인 private 을 쓰면 됩니다.

field를 선언할 때 private double radius;  라고 선언하면 외부에서 접근을 할 수 없게 됩니다.

자바에서는 이런식으로 객체의 구성요소를 외부로부터 감추는 정보 은닉(information hiding) 기술을 제공하고 있는데 이 기술로 객체들이 복잡하게 얽히는 것을 방지합니다.


«    DopZaClub   »


반응형

댓글