Section 47.5: 반환 (Return) 타입

메소드는 아무것도 반환하지 않거나 (void), 아니면 특정 타입의 값을 반환하게 되어 있다:

// 어떤것도 반환하지 않기를 원하는 경우 반환 타입으로 void 를 사용한다. static void ReturnsNothing() { Console.WriteLine("Returns nothing"); } // 값을 반환하기를 원하는 경우 반환할 값의 타입을 기술해준다. static string ReturnsHelloWorld() { return "Hello World"; }

만약 메소드가 반환값 타입을 기술하고 있다면, 해당 메소드는 값을 반드시 반환하여야 한다. 반환시에는 return 문을 사용한다.

프로그램의 실행이 return 문에 도달한 경우, 주어진 특정 값이 반환되며 return 문 아래의 코드들은 더이상 실행되지 않을 것이다 (finally 블럭의 경우는 예외로, 이는 실제 메소드가 반환하기 직전에 여전히 실행이 될 것이다).

만약 메소드가 아무것도 반환하지 않는 경우에도 (void), 해당 메소드 실행을 즉시 끝내고자 하는 경우 아무런 값 없이 return 문을 호출할 수 있다. 그러나 이러한 메소드의 마지막 부분에서는 return 문의 사용이 불필요하다.

유효한 return 문들의 예제:

return; return 0; return x * 2; return Console.ReadLine();

예외 (exception) 발생 시에는 값 반환 없이 메소드의 실행이 종료될 수 있다. 또한, yield 키워드를 이용하여 반환값들이 생성되는 반복기 (iterator) 블럭 등도 있으나, 이들은 특수한 경우로써 이 시점에서는 설명하지 않도록 한다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 47.4: 매개변수 (Parameter) 와 전달 인자 (Argument)

하나의 메소드는 원하는 수 만큼의 매개변수 (parameter) 를 선언할 수 있다 (이 예제에서는, i, s 그리고 o 가 매개변수에 해당한다):

static void DoSomething(int i, string s, object o) { Console.WriteLine(String.Format("i={0}, s={1}, o={2}", i, s, o)); }

매개변수는 메소드 밖에서 안으로 값이 전달되도록 하여, 메소드가 해당 값을 이용하여 실제 동작을 하도록 해 준다. 여기서 동작이라 함은 값을 출력한다거나, 매개변수로 참조되어 넘어온 객체를 변경한다거나, 혹은 해당 값을 저장하는 등의 모든 종류의 작업을 통칭한다.

메소드를 실제로 호출하는 시점에, 각 매개변수가 실제로 가지게 될 값을 넘기게 되며, 이렇게 메소드 호출시에 실제로 넘기는 값들을 전달 인자 (Argument) 라고 부른다:

DoSomething(x, "hello", new object());
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 47.3: 메소드 선언하기

모든 메소드들은 액세스 한정자 (Access Modifier, 예: public, private, ...) 와 생략 가능한 추가적인 한정자들 (Optional Modofier, 예: abstract), 이름 및 필요한 경우 파라미터들로 이루어진 고유의 서명 (signature) 을 갖게 된다. 유의할 점은, 메소드 반환값의 타입은 서명의 일부분이 아니라는 점이다. 메소드의 prototype 은 다음과 같이 표현된다:

AccessModifier OptionalModifier ReturnType MethodName(InputParameters) { // 메소드 본문 (body) }

AccessModifier 에는 public, protected, private 등이 있으며 기본값으로는 internal 을 갖게 된다.

OptionalModifier 에는 static abstract virtual override new 혹은 sealed 등이 있다.

ReturnType 은 반환값이 없는 경우에는 void 이며, 있는 경우에는 간단한 타입인 int 부터 복잡한 클래스에 이르기까지 어떠한 타입도 될 수 있다.

메소드에는 입력 파라미터가 아예 없을 수도 있으며 복수개의 파라미터가 존재할수도 있다. 메소드를 위한 파라미터를 설정하려면, 각각의 파라미터를 일반적인 변수를 선언하듯이 (예: int a) 선언하게 되며, 복수개의 파라미터를 선언하는 경우는 각 파라미터 사이에 쉼표를 이용해 구분을 하여야 된다 (예: int a, int b).

파라미터들은 기본값을 가질 수 있다. 이를 위해서는 해당 파라미터에 기본이 될 값을 설정해주어야 한다 (예: int a = 0). 이렇게 파라미터가 기본값을 가지는 경우, 실제 메소드 호출 시 파라미터에 대한 값을 설정하는 부분은 생략이 가능하다.

아래 예제는 두 정수의 합을 반환하는 메소드를 나타내고 있다:

private int Sum(int a, int b) { return a + b; }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 47.2: 무명 (Anonymous) 메소드

무명 (Anonymous) 메소드는 코드 블록을 delegate 파라미터로 전달할 수 있는 기능을 제공한다. 이들은 본문 (body) 은 있지만 이름이 없는 메소드로 생각할 수 있다.

delegate int IntOp(int lhs, int rhs); class Program { static void Main(string[] args) { // C# 2.0 정의 IntOp add = delegate(int lhs, int rhs) { return lhs + rhs; }; // C# 3.0 정의 IntOp mul = (lhs, rhs) => { return lhs * rhs; }; // C# 3.0 정의 - 축약형 IntOp sub = (lhs, rhs) => lhs - rhs; // 각 메소드를 호출한다 Console.WriteLine("2 + 3 = " + add(2, 3)); Console.WriteLine("2 * 3 = " + mul(2, 3)); Console.WriteLine("2 - 3 = " + sub(2, 3)); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 47.1: 메소드 호출하기

static 메소드 호출하기:

// 단일 파라미터 System.Console.WriteLine("Hello World"); // 다중 파라미터 string name = "User"; System.Console.WriteLine("Hello, {0}!", name);

static 메소드를 호출하고 반환된 값을 저장하기:

string input = System.Console.ReadLine();

instance 메소드 호출하기:

int x = 42; // 여기서 호출하고 있는 instance 메소드는 Int32.ToString() 이다 string xAsString = x.ToString();

generic 메소드 호출하기

// 'T[] CreateArray<T>(int size)' 와 같은 메소드를 호출한다고 가정한다 DateTime[] dates = CreateArray<DateTime>(8);
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 46.3: 익명 형식 (anonymous types) 과 함께 객체 초기자 (Object initializer) 사용하기

객체 초기자 (Object initializer) 는 컴파일러에 의해 생성되는 형식인 익명 형식 (anonymous type) 을 초기화 할 수 있는 유일한 방법이다.

var album = new { Band = "Beatles", Title = "Abbey Road" };

이러한 이유로 인해, LINQ 의 select 질의문에서 객체 초기자가 널리 사용되고 있는데, 이는 질의한 객체들 중 사용자가 어느 부분에 관심이 있는지를 표현해주는 편리한 방법을 제공하기 때문이다.

var albumTitles = from a in albums select new { Title = a.Title, Artist = a.Band };
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 46.2: 기본이 아닌 (non-default) 생성자와 함께 객체 초기자 (Object initializer) 사용하기

객체 초기자 (Object initializer) 는 필요한 경우 생성자와 결합하여 해당 타입을 초기화 시키는 것이 가능하다. 아래와 같은 클래스가 정의되어 있는 경우를 확인하여 본다:

public class Book { public string Title { get; set; } public string Author { get; set; } public Book(int id) { // 생성자에서 필요한 작업을 수행한다 } // 클래스의 나머지 선언 부분 } var someBook = new Book(16) { Title = "Don Quixote", Author = "Miguel de Cervantes" }

의 코드는 먼저 Book(int) 생성자를 이용해 Book 객체를 생성할 것이며, 이후 객체 초기자를 이용해 각 속성값을 설정할 것이다. 이는 아래 코드와 동일한 효과를 갖는다.

var someBook = new Book(16); someBook.Title = "Don Quixote"; someBook.Author = "Miguel de Cervantes";
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 46.1: 객체 초기자 (Object initializer) 기본 사용법

객체 초기자 (Object initializer) 는 객체를 생성하면서 그 즉시 여러 종류의 속성값을 지정하고자 하나, 제공되는 생성자들만으로는 처리가 불가능한 경우 유용하게 사용할 수 있다. 아래와 같은 클래스가 있다고 할 때,

public class Book { public string Title { get; set; } public string Author { get; set; } // 클래스의 나머지 선언부 }

객체 초기자를 이용하여 클래스의 새로운 인스턴스를 초기화 하고자 한다면, 다음과 같이 코드를 작성할 수 있다:

Book theBook = new Book { Title = "Don Quixote", Author = "Miguel de Cervantes" };

이는 아래 코드와 동일한 효과를 갖는다.

Book theBook = new Book(); theBook.Title = "Don Quixote"; theBook.Author = "Miguel de Cervantes";
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts