Riucc's Storage
RSS
태그
관리
쓰기
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
Riucc's Storage

[C#] - 참조에 의한 호출 : ref, out 키워드

C#|2019. 4. 12. 15:28
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

○ 참조에 의한 호출 : ref, out 키워드 

 

- 참조에 의한 호출 : ref

     ref 사용 시 꼭 해야할 것

        1. 메소드 매개변수 선언 시 ref를 매개변수 앞에 꼭 표기해야 한다

        2. 해당 메소드를 호출할 때 ref를 매개변수 앞에 꼭 표기해야 한다

     ref 사용 시 참조 형식, 힙에 존재하는 데이터의 주소값을 가리키고 있으며 주소값이 전달된다

     값 형식 stack의 주소값 자체를 전달하고 heap의 같은 주소값을 가리키니 

     매개변수로 넘어간 것들에 대한 값이 바뀔 수 있다


- 참조는 왜 하는가?

     메소드에 객체 전달 시, 객체 내부 값이나 객체 자체를 변경하기 위해서


- ref 와 out의 차이는 무엇인가?

     ref : 넘기기전 변수를 초기화 해야한다, 메소드 내부에서 변수 값을 수정 시 사용

     out : 넘기기전 변수 초기화하지 않아도 된다, 한 메소드에서 여러 개의 값을 반환하기 위해 사용


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int value1 = 5, value2 = 10;
            SwapValue1(value1, value2);
 
            Console.WriteLine($"value1 = {value1}, value2 = {value2}");
 
            Console.WriteLine("=======================================");
            int value3 = 5, value4 = 10;
            SwapValue2(ref value3, ref value4);
            Console.WriteLine($"value3 = {value3}, value4 = {value4}");
        }
 
        // 값 형식 호출
        static void SwapValue1(int value1,  int value2)
        {
            int temp = value1;
            value1 = value2;
            value2 = temp;
        }
 
        // 메소드 매개변수 선언 시 ref 표기해야 함(참조에 의한 호출)
        static void SwapValue2(ref int value1, ref int value2)
        {
            int temp = value1;
            value1 = value2;
            value2 = temp;
        }
    }
}
Colored by Color Scripter
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // out은 넘기기전 변수를 초기화하지 않아도 됨
            // out을 이용해 여러 개의 값을 반환하려 할 때 사용
            // 메소드 내부에서 생성된 값을 반환하려 할 때 사용
            int quotient;
            if(Divide(15, 3, out quotient) == true)
            {
                Console.WriteLine($"out quotient = {quotient}");
            }
 
            int num;
            if(int.TryParse("23213213", out num) == true)
            {
                Console.WriteLine($"out num = {num}");
            } else
            {
                Console.WriteLine("숫자 아님");
            }
        }
 
        static bool Divide(int n1, int n2, out int result)
        {
            if( n2 == 0 )
            {
                result = 0;
                return false;
            }
            result = n1 / n2;
            return true;
        }
    }
}
Colored by Color Scripter
cs



저작자표시 (새창열림)

'C#' 카테고리의 다른 글

[C#] - Dictionary 딕셔너리  (0) 2019.04.15
[C#] - Thread의 무명 메소드화, 람다식 표현  (0) 2019.04.15
[C#] - 정적 생성자(static constructor) 와 일반 생성자의 차이  (0) 2019.04.12
[C#] - &&와 || 쓸 때 고민하지 않으면 버그가 생긴다  (0) 2019.04.12
[C#] - 컬랙션 : ArrayList, List<T>, HashTable  (0) 2019.04.11

댓글()
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
최근 등록 현황
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
달력
지난달
2025.12
다음달
일월화수목금토
123456
78910111213
14151617181920
21222324252627
28293031
태그 구름
  • HTML
  • 리눅스
  • 커널 모듈 프로그래밍
  • 소켓 프로그래밍
  • 카카오 로그인
  • 정보처리산업기사 16년 필기
  • jsp
  • 정보처리산업기사 총정리
  • 정보처리산업기사 필기 정리
  • 카카오 로그인 연동
  • nodejs MySQL 연동하기(Connection Pool)
  • nodejs express
  • 안드로이드 카카오 로그인
  • 안드로이드 카카오 로그인 연동
  • 정보처리산업기사 15년 필기
  • 정보처리산업기사 정리
  • 정보처리산업기사 필기
  • 정보처리산업기사 요약
  • 소켓
  • 데이터베이스
  • 정보처리기사 실기 정리
  • 정보처리산업기사 16년
  • 안드로이드 intent
  • 안드로이드
  • 이클립스 mysql 연동
  • 이클립스 디비 연동
  • 정규화
  • 자료구조
  • 정규형
  • 정보처리산업기사 15년
카운터
전체 방문자
오늘
어제
Skin by M1REACT. Designed by M1STORY.TISTORY.COM. Valid XHTML 1.0 and CSS 3. Copyright ⓒ Riucc's Storage. All rights reserved.

티스토리툴바