Java Java vs C# (Method, 메소드) - 10부
페이지 정보
본문
안녕하세요. 소심비형입니다. 요즘 날씨가 갑자기 쌀쌀해졌네요. 주변에 감기로 고생하시는 분들이 많습니다. 감기 조심하세요~
오늘은 메소드에 대해서 이야기 해보도록 하겠습니다. 이 부분을 모두 다루기에는 내용이 방대해지구요. 생각해보면 해야할 이야기가 너무 많습니다-_-; C#의 경우에는 익명 메소드부터 확장 메소드까지 지원하고 있고, 또 C# 6이 나온 탓에 문법적으로 몇가지가 더 추가되었습니다. 따라서 여기에서는 기본 메소드에 대해서만 알아보도록 하겠습니다.
Java
public class MethodTest {
public static void main(String[] args) {
System.out.printf("a + b = %s", plus(1, 2));
System.out.println();
printPlus(5, 10);
System.out.println();
Size size = new MethodTest().new Size(1024, 768);
size.width = 2048;
int a = 1024;
valueOfReference(a, size);
System.out.printf("a = %s", a);
System.out.println();
System.out.printf("size.width = %s", size.width);
System.out.println();
System.out.printf("1 + 2 + 3 = %s", sum(1, 2, 3));
}
// 반환 값이 있는 메소드
static int plus(int a, int b) {
return a + b;
}
// 반환 값이 없는 메소드
static void printPlus(int a, int b) {
System.out.printf("a + b = %s", a + b);
}
// 매개변수의 개수가 정해지지 않은 반환 값이 있는 메소드
static int sum(int... nums) {
int sum = 0;
for (int i : nums) {
sum += i;
}
return sum;
}
// 값 형식과 참조 형식의 매개변수를 전달하는 메소드
static void valueOfReference(int a, Size s) {
a++;
s.width++;
}
// Nested sample class.
class Size {
// Instance members
public int width, height;
// Constructor
public Size(int width, int height) {
this.width = width;
this.height = height;
}
}
}
결과는 아래와 같습니다.
C#
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("a + b = {0}", plus(1, 2)); printPlus(5, 10);
Size size = new Size(1024, 768);
size.width = 2048;
int a = 1024; int b = 0;
valueOfReference(ref a, out b, size);
Console.WriteLine($"a = {a}");
Console.WriteLine($"b = {b}");
Console.WriteLine($"size.width = {size.width}");
Console.WriteLine($"1 + 2 + 3 = {sum(1, 2, 3)}");
Console.ReadLine();
}
// 반환 값이 있는 메소드
static int plus(int a, int b)
{
return a + b;
}
// 반환 값이 없는 메소드
static void printPlus(int a, int b)
{
Console.WriteLine("a + b = {0}", a + b);
}
// 매개변수의 개수가 정해지지 않은 반환 값이 있는 메소드
static int sum(params int[] nums)
{
int sum = 0;
foreach (int i in nums)
{
sum += i;
}
return sum;
}
// 값 형식과 참조 형식의 매개변수를 전달하는 메소드
static void valueOfReference(ref int a, out int b, Size s)
{
a++;
b = 768;
s.width++;
}
// Nested sample class.
class Size
{
// Instance members
public int width, height;
// Constructor
public Size(int width, int height)
{
this.width = width;
this.height = height;
}
}
}
}
아래는 결과입니다.
-
C#은 값 형식을 참조 형식으로 전달하기 위해 ref, out 키워드를 제공합니다. (Java는 값 형식을 참조로 전달하려면 다른 방식을 이용해야 합니다.)
-
ref의 경우 사용하기 전에 반드시 초기화 해야 하고, out의 경우에는 전달 받은 메소드에서 초기화 해야 합니다.
-
개수(배열의 길이)가 정해지지 않은 임의의 매개 변수를 전달 받으려면 Java는 ...을 사용하고, C#은 params 키워드를 사용합니다.
ref와 out의 경우에는 C#에서 매우 특별한 역할을 하고 있습니다. 메소드의 특성상 하나의 값만 리턴할 수 있으므로 out 또는 ref 키워드는 상당히 유용하며 자주 사용하게 됩니다. C#의 대표적인 out 키워드를 활용하는 메소드가 원시타입의 자료형에서 제공하고 있는 TryParse가 있습니다.
ref에 대해서 자세히 알아보기: [ 클릭 ]
out에 대해서 자세히 알아보기: [ 클릭 ]
다음 시간에...
- 이전글Java vs C# (Property, 속성) - 11부 20.08.27
- 다음글17-4. 클래스의 확장 메서드. (Extension method) 20.08.21
댓글목록
등록된 댓글이 없습니다.