메소드(함수)
먼저 메소드에 대한 설명을 해야 할 듯 싶다. 메소드란 무엇인가? 기능이란 뜻을 가졌다. 함수 또한 기능이란 의미가 있다.
그런데 보통 함수라는 명칭은 C언어쪽에서 많이 쓰이고, 그 외에는 보통 메소드라는 말을 많이 사용한다.
즉, 어떠한 동작을 한다는 것이다. 그 동작이란 ? 보통 프로그래머가 정한 일련의 행동을 말한다.
프로그래밍에서 규칙 하나로 비슷한 코드는 하나의 메소드형태로 취합하는 것이 원칙이다.
구구단을 출력하는 코드가 10번 필요하다. 그럼 매번 코드를 추가 할 것인가?
아니다.
효율적으로 할 수 해결 하는 방법이 바로 메소드이다.
루비 언어에서의 메소드의 형식이 있다.
프로그래밍언어에서의 형식은 중요하다. 바로 문법 그 자체이기 때문이다.
def 메소드명 [ ( [인자 [=기본값]]...[, * 인자 [ , &expr]] ) ]
<수행 문장>
end
메소드 정의란?
-내가 정할 행동을 하나의 이름을 붙이는 작업이다. 그리고 코드를 메소드 형식에 감싸면 된다.
irb(main):001:0> def number irb(main):002:1> i=0 irb(main):003:1> while i < 10 irb(main):004:2> puts i irb(main):005:2> i += 1 irb(main):006:2> end irb(main):007:1> end
메소드 호출
-메소드 명() 으로 호출 할 수 있지만, 루비의 경우 괄호의 생략이 가능하다.
irb(main):008:0> number() 0 1 2 3 4 5 6 7 8 9 => nil irb(main):009:0> number 0 1 2 3 4 5 6 7 8 9 => nil
자! 이제 메소드에 대한 개요는 머릿속에 그려질 것이다.
이제 반환을 해보자!
반환은 비교에서 1==1 이 문장에서는 1과 1이 같냐? 당연히 같으므로 True를 출력합니다.
이 True가 바로 비교에 대한 반환 값이 되는 거죠!
메소드 또한 반환이 가능합니다.
메소드의 반환(Return)
-def 안에서 end 전에 특정 값을 반환하는 문장으로 return <변수>로 쓰면 됩니다.
물론 루비의 경우 return을 써주지 않아도 마지막 문장을 return 값으로 인식합니다.
그리고 추가적으로 다중 리턴도 가능합니다. ',' 콤마로 분리하여서 말이죠? ^^(이 경우 배열을 리턴하는 것입니다.지금은 모른체 해주세요.)
irb(main):010:0> def get_member irb(main):011:1> return "member" irb(main):012:1> end => :get_member irb(main):013:0> get_member => "member" irb(main):014:0> def get_no_member irb(main):015:1> i = '100' irb(main):016:1> j = '200' irb(main):017:1> k = '300' irb(main):018:1> end => :get_no_member irb(main):019:0> puts get_no_member 300 => nil irb(main):020:0> def get_multi_return irb(main):021:1> i = 20 irb(main):022:1> j = 30 irb(main):023:1> k = 50 irb(main):024:1> return i,j,k irb(main):025:1> end => :get_multi_return irb(main):026:0> puts get_multi_return 20 30 50 => nil
메소드의 인자
-인자라는 것은 파라미터 값, 인자값, 여러 명칭으로 쓰입니다. 하지만 하나의 의미를 가집니다. 바로 메소드에 안에 외부의 특정 값을 전달한다는 뜻이죠.
왜 인자를 주느냐? 그건 당장 설명 시키긴 어렵지만. 단적으로 설명하자면,
메소드 안의 코드와 메소드 바깥의 코드는 분리되어 있다고 생각 합시다. 그럼 그 두 코드간 연결고리가 없죠?
메소드 안에서 외부에서 쓰이는 특정 변수 값이 필요로 한데 가져 올 수 없으니 말이죠??? ㅎ
그 해결로 인자라는 개념이 탄생했습니다.
irb(main):027:0> def get_param(arg) irb(main):028:1> return arg irb(main):029:1> end => :get_param irb(main):030:0> puts get_param 1 1 => nil irb(main):031:0> puts get_param 3 3 => nil irb(main):032:0> def get_mul_param(arg1, arg2) irb(main):033:1> return arg1 + arg2 irb(main):034:1> end => :get_mul_param irb(main):035:0> puts get_mul_param 10, 20 30 => nil
위의 코드에서는 인자값을 더 하여 리턴하므로 10, 20의 덧셈 값으로 30이 반환되는 것을 볼 수 있죠?
인자의 기본값
기본값이란?
-인자로 들어 오는 값이 아무것도 없다면, 특정한 값을 기준으로 그 메소드를 동작시키겠다.
이거죠. 어떤 시기에는 외부 변수의 특정 값이 필요하고 어떤 시기에는 그냥 항상 같은 값이 필요할 때 쓰이게 됩니다.
irb(main):036:0> def get_default_param(arg = 100) irb(main):037:1> return arg irb(main):038:1> end => :get_default_param irb(main):039:0> puts get_default_param 10 10 => nil irb(main):040:0> puts get_default_param 100 => nil irb(main):041:0>
코드를 보시면 됩니다. 10을 입력할 때는 10이 나오고 아무것도 입력하지 않고 호출할 땐 100이 즉, 메소드의 기본값이 출력 됩니다.
'프로그래밍 > Ruby' 카테고리의 다른 글
Ruby 프로그래밍 - Rubygem 설치하기 (0) | 2015.02.20 |
---|---|
Ruby 프로그래밍 - 7. 쉬어가기 구구단 메소드 만들기 (0) | 2015.02.19 |
Ruby 프로그래밍 - 5. 반복문 (0) | 2015.02.19 |
Ruby 프로그래밍 - 4. 조건문 (0) | 2015.02.19 |
Ruby 프로그래밍 - 3. 비교 (0) | 2015.02.19 |