내가 살아가는 방식...

karma01.egloos.com

포토로그



자바강좌 - 객체지향 ( 클래스와 객체 2 ) JAVA

클래스와 객체에 대한 두번째 강좌를 시작하겠습니다.

저번시간에 클래스는 객체를 인스턴스화시킬수 있는 틀이며 클래스는 property와 method로 구성되어져 있다고 말씀드렸습니다.

클래스를 데이터 관점에서 생각해본다면 클래스는 데이터와 함수의 결합이라고 볼수 있겠습니다.

자바와 같은 객체지향언어에서는 데이터(변수)와 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 하였습니다.

자바에서 문자열을 예로 든다면 String이라는 클래스로 정의해서 문자열과 문자열을 다루는데 필요한 함수들을 함계 묶기 위함입니다.

참고삼아 자바의 String 클래스를 찾아서 코드를 리뷰해 보면 위에서 설명드린 이야기를 이해할 수 가 있으며 많은 공부가 될듯합니다.

그럼 클래스의 변수와 메서드에 대해서 한층 더 심도있게 알아보도록 하겠습니다.

* 변수를 선언한 위치에 따른 종류

1. 인스턴스 변수 ( instance variable )

- 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할때 만들어집니다. 인스턴스 변수의 값을 읽어오거나 저장하기 위해서는 우선 인스턴스를 생성해야합니다. 

저번시간의 예제에서도 보았듯이 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있습니다. 인스턴스마다 고유한 상태를 유지해야하는 프로퍼티(속성)인 경우에 인스턴스 변수로 선언해야 합니다.

2. 클래스 변수 ( class variable)

- 클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 선언하면 됩니다.
  클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유하게 됩니다. 그래서 클래스 변수를 shared variable ( 공유변수 )이라고도 바꾸어 말합니다. 인스턴스변수는 인스턴스가 인스턴스화가 되어야지만 사용할 수 있지만 클래스 변수는 인스턴스를 생성하지 않고도 바로 사용할 수 있습니다.
클래스이름.클래스변수 와 같이 사용이 가능합니다.

3. 지역 변수 ( local variable )

- method내에서 선언되고 사용된다고 생각하시면 됩니다. 메소드가 종료되면 소멸되어서 사용할 수 가 없습니다. 예를 들어 루프문에서 사용된 지역변수는 루프가 종료되면 소멸되어서 사용할 수 없습니다.

class Variables

{

int instanceVar; // 인스턴스 변수

static int classVar; // 클래스 변수



void variableMethod()

{

int localVar = 0; // 지역변수

}

}


아래처럼 코딩을 하고 테스트를 해봅니다. 아래코드를 이해하시면 위에서 설명한 내용들을 쉽게 이해하실 수 있습니다.

개인적으로 돈(?)을 좋아해서 Money 클래스를 만들어보았습니다.

돈을 좋아한다고 해서 너무 속물이라고는 생각하지 말아주세요. ㅎ 

겉으로는 안그런척해도 돈을 좋아하지 않는 사람을 여태껏 살아오면서 보지 못했습니다. ^^;;;;





































위의 코드를 보면 쉽게 아실수 있겠으나, 조금만 설명하면

3번째 라인에서 돈의 종류를 나타내는 kind 인스턴스 변수를 String 타입으로 선언하였으며, 4번째 라인에서 돈의 단위를 숫자형으로 num인 인스턴스 변수로 선언하였습니다.

5, 6라인에서 static 변수로 동전인지 지폐인지 나타내는 클래스 변수를 선언하였습니다.

8라인부터 17라인은 메소드를 구현한 부분입니다.

MoneyTest 클래스에서...

23라인과 24라인에서 클래스 변수를 System.out.println으로 출력하였습니다. 클래스변수.클래스이름 으로 출력한 코드가 보이시겠죠?

Money 클래스의 인스턴스의 참조변수로 m1과 m2를 생성한것이 보입니다. 27, 28, 29라인과 34, 35, 36라인을 보시면 참조변수.인스턴스변수 로 값을 할당한것을 보실 수 있습니다.

마지막으로 메소드에 대해서 이론적으로 알아보도록 하겠습니다.

메소드(method) 위 예제에도 간단히 보여드렸읍니다만, 어떤 작업을 수행하기 위한 명령문의 집합입니다.

보통 어떤 값을 입력받아서 처리하고 그결과를 돌려주기도 하고, 위의 예제처럼 입력받은 값은 있지만 결과를 반환하지 않을 수도 있습니다.

메소드를 작성하는 방법에는 아래와 같이 작성하는 것이 좋습니다.

- 하나의 메서드는 한 가지 기능만 수행하도록 작성하는것이 좋습니다.

- 반복적으로 수행되어야 하는 여러 문장을 하나의 메소드로 정의해 놓는것이 좋습니다.

- 관련된 여러 문장을 하나의 메소드로 작성하는 것이 좋습니다.


메소드가 정상적으로 종료되는 경우는 아래와 같습니다.

- 메소드의 {} 내의 마지막 문장까지 수행했을때.

- 메소드의 {} 내에 있는 문장을 수행하는 도중 return문을 만났을때.

아래에 메소드에 대한 예제를 코딩하여 올려둡니다. 코드는 조금만 유심히 보시면 쉽게 이해하실 수 있습니다.



덧글

댓글 입력 영역