2008년 05월 06일
클래스를 이용하자 - 메소드편.
이번에는 메소드에 대해서 알아보도록 할까요?
메소드는 우리가 자바를 처음 접하게 되면서 부터 지금까지도 계속 다뤄 왔습니다.
단지 인지하고 있지 못했거나 그냥 당연한듯이 지나치고 있어서 메소드에 대해서 자세히 알고 있지 못할겁니다.
그럼 메소드에 대해서 알아봅시다.
일단 지금까지 자바를 공부하면서 메인메소드만 다뤄 왔죠.
public static void main(String args[])
이게 늘 습관처럼 사용 했던 메인메소드 입니다. 아주 익숙하죠?
그리고 여기서 한가지 더! 처음에 봤을 때 보다 좀 다르게 보이지 않습니까?
public에 대해서도 좀 알고, static에 대해서도 조금 알게 됐고 ~ void도 ~ 해서
대략 이제 왜 메인메소드가 저렇게 될까 라는걸 좀 이해를 하는 쪽으로 해석이 될 것입니다.
그럼 다시 본론으로 돌아가죠.
메소드를 우리가 사용하는 이유에 대해서 부터 알아보죠.
우리가 밥을 먹을 때 숟가락을 가지고 무엇을 할까요? 밥을 먹는 기능을 하죠?
우리가 입으로 무엇을 할까요? 의사를 전달하는 말과 음식물을 먹는 기능 등을 하죠?
여기서 메소드에 대한 이야기를 하자면 위에서 말한 것 중에서 기능에 해당한다고 보시면 됩니다.
숟가락이라는 것이 있으면 숟가락으로 밥을 먹는 기능 한가지를 하죠?
이렇게 어떠한 것에 대한 기능을 하도록 정의해 놓은것이 메소드 입니다.
그럼 메소드에는 한가지 기능만 있을까요? 아닙다. 여러가지의 기능을 넣어서 사용 할 수 있지만,
우리는 되도록이면 한가지 정도나 어떠한 대표적인 기능만을 하는 것으로 짜는 것이 좋습니다.
이유는 그래야 소스를 볼 때도 편하고 코딩을 하는 프로그래머 또한 편하지요~
그리고 가장 큰 이유는 객제치향을 알아갈수록 자연스럽게 이렇게 되는데 그 이유는 객체지향의 장점을
이용하게 되기 때문입니다.
기존에 C로 프로그래밍 하는 절차지향 보다 정말 편하지요 ~
그럼 일단 메소드에 기본 소스를 한번 보고 계속 이야기 해 봅시다.
public void method()
{
int a = 0;
}
저것이 메소드 입니다.
간단하게 설명을 하자면 public는 제외 시킬수도 있지만 대체적으로 public를 사용하기도 하죠.
그러므로 접근제어자를 이용이 가능하다는 것이 일단 보이죠? 다음!
void 이녀석은 왜 쓸까요? 이유는 간단합니다. 메소드라는 것은 어떠한 기능을 수행하는 것으로 사용이 됩니다.
그리고 한가지 더 기능이 있습니다. 어떠한 값을 반환하기도 하지요.
근데 이 두가지 경우 중 상황에 맞게 기능을 수행하는 것인지, 값을 반환하는 것인지를 사용합니다.
위에 소스는 반환값이 없는 형태이기 때문에 void를 사용하는 것 입니다.
그럼 만약에 반환형을 쓴다면 어떻게 해야 할까요? 소스를 봅시다
public int method()
{
int a = 0;
return a;
}
이런식으로 사용해야 합니다. 이유는 반환형인 return을 이용해서 a의 값을 Integer 형태로 반환을 해주었죠.
위에 보시면 void 대신 int를 사용한 것을 보면 Integer로 반환 했다는 것을 나타냅니다.
반환형에서는 void가 올 수 없는 대신에 반환대는 값에 형태를 정해줘야 합니다.
단, 반환되는 데이터가 String 형인데 int로 반환을 하려 들면 에러 발생합니다.(소한테 고기 먹이는 격 -_-......)
그리고 여기에도 소괄호가 존재하죠? 인수 값을 넣기 위함입니다.
인수값이란 메소드 내에서만 사용 가능한 변수를 선언하는 용도로 사용되기도 하고
어떠한 값을 제공 받을 때 쓰는 그릇(?)으로 사용되기도 합니다.
어떠한 값을 제공 받는다 한다는 것은 메소드를 호출 하려 들 때 당연히 메소드 내에서 처리를 해야 할 값들이 있겠죠?
그것을 받아 들일 때 사용되는 것입니다.
자 그럼 일단 메소드에 대해서 한번 정리를 해봅시다.
1. 메소드는 하나의 기능을 수행하도록 짜는 것이 좋다.
2. 반환값이 있을 경우에는 return을 사용하고 void 대신에 반환값의 형태를 정해줘야 한다.
3. 반환값이 없을 경우에는 return을 생략하거나 return;만 쓰고 void를 쓴다.
4. 접근 제어자를 사용한다.
5. 지역변수를 사용한다.(인수값과 변수)
일단 이정도로 정리하는것이 좋겠네요 ^^;
그리고 오버로딩에 대해서 간단하게 설명하고 끝내겠습니다.
오버로딩이 뭘까요? 음.. 일단 먼저 봅시다. 이건 설명보다 먼저 보고 나서 듣는게 편하니까요.
public void method(int a)
public void method(String a)
public void method(char a)
위에 3개는 같은 것일까요? 답은 다른것 입니다.
분명히 메소드의 이름은 같습니다. 근데 어째서 다른 것이냐 하면은 인수값이 다르기 때문에 다른것입니다.
자, 그럼 이제 오버로딩에 정의를 알려드리지요.
오버로딩이란 한 클래스 내에 같은 이름의 메소도를 여러개 정의하는 것! 입니다.
조건은 다음과 같습니다.
1. 메소드의 이름이 같아야 한다.
2. 매개변수 또는 타입이 달라야 한다.
그럼 왜 이렇게 동명이인과 같은 오버로딩을 사용할까요?
그 이유는 다음과 같습니다.
보통 프로그래밍 하다 보면 이 변수의 이름은 뭘로 할까? 메소드의 이 기능을 하니까 이건 이거 저건 저거..
하다 보면 철수, 영희, 바둑이, 영수 그리고 기타 등등.. 엄청나게 많은 배역들이 등장하죠 -_-;
이런점을 단순화 시키기 위해서 사용하기도 합니다.
간단한 예를 들자면 같은 이름이여도 각자 하는 기능이 다른 철수라는 사람 10명이 있습니다.
그럼 철수들 한테 일을 주면 알아서 다시 내 놓습니다.
아주 편하죠 -_-? 이래서 오버로딩을 사용하기도 하지요.
자바는 편리하게도 이렇게 메소드의 이름이 같아도 하는 일이 다르면 알아서 구분을 지어서 일을 처리해주죠.
우리는 그냥 엑스트라를 왕창 만들어 내 사용하는 셈이지요. 시체1,2,3,4 처럼 말이죠.
그럼 이쯤에서 메소드에 대한 글을 마치려 합니다.
프로젝트로 인해서 이런 글이 많이 줄어들수도 있습니다 ^^;
먹고는 살아야 하기 때문에..ㅋㅋ
캄사합니다.
메소드는 우리가 자바를 처음 접하게 되면서 부터 지금까지도 계속 다뤄 왔습니다.
단지 인지하고 있지 못했거나 그냥 당연한듯이 지나치고 있어서 메소드에 대해서 자세히 알고 있지 못할겁니다.
그럼 메소드에 대해서 알아봅시다.
일단 지금까지 자바를 공부하면서 메인메소드만 다뤄 왔죠.
public static void main(String args[])
이게 늘 습관처럼 사용 했던 메인메소드 입니다. 아주 익숙하죠?
그리고 여기서 한가지 더! 처음에 봤을 때 보다 좀 다르게 보이지 않습니까?
public에 대해서도 좀 알고, static에 대해서도 조금 알게 됐고 ~ void도 ~ 해서
대략 이제 왜 메인메소드가 저렇게 될까 라는걸 좀 이해를 하는 쪽으로 해석이 될 것입니다.
그럼 다시 본론으로 돌아가죠.
메소드를 우리가 사용하는 이유에 대해서 부터 알아보죠.
우리가 밥을 먹을 때 숟가락을 가지고 무엇을 할까요? 밥을 먹는 기능을 하죠?
우리가 입으로 무엇을 할까요? 의사를 전달하는 말과 음식물을 먹는 기능 등을 하죠?
여기서 메소드에 대한 이야기를 하자면 위에서 말한 것 중에서 기능에 해당한다고 보시면 됩니다.
숟가락이라는 것이 있으면 숟가락으로 밥을 먹는 기능 한가지를 하죠?
이렇게 어떠한 것에 대한 기능을 하도록 정의해 놓은것이 메소드 입니다.
그럼 메소드에는 한가지 기능만 있을까요? 아닙다. 여러가지의 기능을 넣어서 사용 할 수 있지만,
우리는 되도록이면 한가지 정도나 어떠한 대표적인 기능만을 하는 것으로 짜는 것이 좋습니다.
이유는 그래야 소스를 볼 때도 편하고 코딩을 하는 프로그래머 또한 편하지요~
그리고 가장 큰 이유는 객제치향을 알아갈수록 자연스럽게 이렇게 되는데 그 이유는 객체지향의 장점을
이용하게 되기 때문입니다.
기존에 C로 프로그래밍 하는 절차지향 보다 정말 편하지요 ~
그럼 일단 메소드에 기본 소스를 한번 보고 계속 이야기 해 봅시다.
public void method()
{
int a = 0;
}
저것이 메소드 입니다.
간단하게 설명을 하자면 public는 제외 시킬수도 있지만 대체적으로 public를 사용하기도 하죠.
그러므로 접근제어자를 이용이 가능하다는 것이 일단 보이죠? 다음!
void 이녀석은 왜 쓸까요? 이유는 간단합니다. 메소드라는 것은 어떠한 기능을 수행하는 것으로 사용이 됩니다.
그리고 한가지 더 기능이 있습니다. 어떠한 값을 반환하기도 하지요.
근데 이 두가지 경우 중 상황에 맞게 기능을 수행하는 것인지, 값을 반환하는 것인지를 사용합니다.
위에 소스는 반환값이 없는 형태이기 때문에 void를 사용하는 것 입니다.
그럼 만약에 반환형을 쓴다면 어떻게 해야 할까요? 소스를 봅시다
public int method()
{
int a = 0;
return a;
}
이런식으로 사용해야 합니다. 이유는 반환형인 return을 이용해서 a의 값을 Integer 형태로 반환을 해주었죠.
위에 보시면 void 대신 int를 사용한 것을 보면 Integer로 반환 했다는 것을 나타냅니다.
반환형에서는 void가 올 수 없는 대신에 반환대는 값에 형태를 정해줘야 합니다.
단, 반환되는 데이터가 String 형인데 int로 반환을 하려 들면 에러 발생합니다.(소한테 고기 먹이는 격 -_-......)
그리고 여기에도 소괄호가 존재하죠? 인수 값을 넣기 위함입니다.
인수값이란 메소드 내에서만 사용 가능한 변수를 선언하는 용도로 사용되기도 하고
어떠한 값을 제공 받을 때 쓰는 그릇(?)으로 사용되기도 합니다.
어떠한 값을 제공 받는다 한다는 것은 메소드를 호출 하려 들 때 당연히 메소드 내에서 처리를 해야 할 값들이 있겠죠?
그것을 받아 들일 때 사용되는 것입니다.
자 그럼 일단 메소드에 대해서 한번 정리를 해봅시다.
1. 메소드는 하나의 기능을 수행하도록 짜는 것이 좋다.
2. 반환값이 있을 경우에는 return을 사용하고 void 대신에 반환값의 형태를 정해줘야 한다.
3. 반환값이 없을 경우에는 return을 생략하거나 return;만 쓰고 void를 쓴다.
4. 접근 제어자를 사용한다.
5. 지역변수를 사용한다.(인수값과 변수)
일단 이정도로 정리하는것이 좋겠네요 ^^;
그리고 오버로딩에 대해서 간단하게 설명하고 끝내겠습니다.
오버로딩이 뭘까요? 음.. 일단 먼저 봅시다. 이건 설명보다 먼저 보고 나서 듣는게 편하니까요.
public void method(int a)
public void method(String a)
public void method(char a)
위에 3개는 같은 것일까요? 답은 다른것 입니다.
분명히 메소드의 이름은 같습니다. 근데 어째서 다른 것이냐 하면은 인수값이 다르기 때문에 다른것입니다.
자, 그럼 이제 오버로딩에 정의를 알려드리지요.
오버로딩이란 한 클래스 내에 같은 이름의 메소도를 여러개 정의하는 것! 입니다.
조건은 다음과 같습니다.
1. 메소드의 이름이 같아야 한다.
2. 매개변수 또는 타입이 달라야 한다.
그럼 왜 이렇게 동명이인과 같은 오버로딩을 사용할까요?
그 이유는 다음과 같습니다.
보통 프로그래밍 하다 보면 이 변수의 이름은 뭘로 할까? 메소드의 이 기능을 하니까 이건 이거 저건 저거..
하다 보면 철수, 영희, 바둑이, 영수 그리고 기타 등등.. 엄청나게 많은 배역들이 등장하죠 -_-;
이런점을 단순화 시키기 위해서 사용하기도 합니다.
간단한 예를 들자면 같은 이름이여도 각자 하는 기능이 다른 철수라는 사람 10명이 있습니다.
그럼 철수들 한테 일을 주면 알아서 다시 내 놓습니다.
아주 편하죠 -_-? 이래서 오버로딩을 사용하기도 하지요.
자바는 편리하게도 이렇게 메소드의 이름이 같아도 하는 일이 다르면 알아서 구분을 지어서 일을 처리해주죠.
우리는 그냥 엑스트라를 왕창 만들어 내 사용하는 셈이지요. 시체1,2,3,4 처럼 말이죠.
그럼 이쯤에서 메소드에 대한 글을 마치려 합니다.
프로젝트로 인해서 이런 글이 많이 줄어들수도 있습니다 ^^;
먹고는 살아야 하기 때문에..ㅋㅋ
캄사합니다.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- 자바의 기본 문법편 by 만성피로
- 자바의 강점! 클래스를 이용하자 편. by 만성피로
- No.080310 by 주노
- . by 2Hot
- 클래스 by LetsJava
# by | 2008/05/06 23:34 | 정리할 자료들 | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
클래스와 메소드 설명을 알기쉽게 자세히 써주셔서 감사합니다 ^^