NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    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;
    		}
    	}
    }

     

     

    결과는 아래와 같습니다.

    hGGmaDn.png

     

     

    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;
                }
            }
        }
    }

     

     

    아래는 결과입니다.

    n9UQzwA.png

     

     

    1. C#은 값 형식을 참조 형식으로 전달하기 위해 ref, out 키워드를 제공합니다. (Java는 값 형식을 참조로 전달하려면 다른 방식을 이용해야 합니다.)

    2. ref의 경우 사용하기 전에 반드시 초기화 해야 하고, out의 경우에는 전달 받은 메소드에서 초기화 해야 합니다.

    3. 개수(배열의 길이)가 정해지지 않은 임의의 매개 변수를 전달 받으려면 Java는 ...을 사용하고, C#은 params 키워드를 사용합니다.

     

    ref와 out의 경우에는 C#에서 매우 특별한 역할을 하고 있습니다. 메소드의 특성상 하나의 값만 리턴할 수 있으므로 out 또는 ref 키워드는 상당히 유용하며 자주 사용하게 됩니다. C#의 대표적인 out 키워드를 활용하는 메소드가 원시타입의 자료형에서 제공하고 있는 TryParse가 있습니다.

     

    ref에 대해서 자세히 알아보기: [ 클릭 ]

    out에 대해서 자세히 알아보기: [ 클릭 ]

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.