덴바의 노트

내일배움캠프 6일차 TIL 본문

프로그래밍 노트/TIL

내일배움캠프 6일차 TIL

덴바 2024. 4. 23. 22:45

 

오늘의 학습 키워드

 

  • out, ref

 

return 타입을 지정할 필요가 없다!?

 

 

    public class Inventory
    {
        private Item item;

        public void SetItem(out Item item)
        {
            Item item1 = new Item();
            item = item1;
        }
    }

[데이터 타입을 메서드 내에 작동으로 영향을 주는  방식]

 

 

기본적으로 함수의 매개변수로 해당 클래스의 필드를 인자로 받아와서 값을 변경하면

 

해당 값은 변하지 않는다.

 

그 이유는..

 

 

매개 변수로 들어온 값은 해당 주소에 저장되어있는 필드 값을 복사해온 것이기 때문이다.

 

 

public static void Swap(int x, int y)
{
    int temp = x;
    x = y;
    y = temp;
}

 

만약 위와 같은  코드가 있다고 가정할 경우...

 

static void Main(string[] args)
{
	int a= 0; 
    int b = 1;
    
    Swap(a, b);
}

 

만약 위와 같은  코드가 있다고 가정할 경우...

 

해당 a, b 필드를 Console로 실행할 경우 a의 값은 0, b의 값은 1로 그대로가 나오게 된다.

 

하지만

 

 

 

static void Main(string[] args)
{
	int a= 0; 
    int b = 1;
    
    Swap(ref a, ref b);
}
public static void Swap(ref int x, ref int y)
{
    int temp = x;
    x = y;
    y = temp;
}

 

위와 같이 값을 Reference(참조)하게 된다면 해당 변수에 대한 값을 직접적으로 영향을 줄 수 있다.

 

 

 

out, ref의 주의 사항

1. 값의 변경 가능성
ref 매개변수를 사용하면 메서드 내에서 해당 변수의 값을 직접 변경할 수 있습니다.

이는 예기치 못한 동작 초래 가능 

2. 성능 이슈
너무 많은 매개 변수를 ref로 전달하면 코드의 가독성이 떨어지고 유지보수가 어려워질 수 있습니다.

3. 변수 변경 여부 주의
out 매개변수는 메서드 내에서 반드시 값을 할당해야 한다.

(3.의 내용이 ref와 out의 큰 차이 입니다)

 

 

 

 


 

오늘의 회고

 

 

해당 기능을 이용하면 void 타입의 함수를 사용하게 되면서 A  = Method();의 형태로 할 필요 없이

 

인자값으로 넣어주기만 해도 값을 변경시킬 수 있다는 것을 알 수 있었다.

 

out, ref를 빈번하게 사용하는 것이 무조건 좋은 것은 아니지만, 

 

어떻게 활용하냐에 따라서 코드를 더욱 간결하고 좋게 만들 수 있을 것 같다.

 

'프로그래밍 노트 > TIL' 카테고리의 다른 글

내일배움캠프 8일차 TIL  (1) 2024.04.25
내일배움캠프 7일차 TIL  (0) 2024.04.24
내일배움캠프 5일차 TIL  (0) 2024.04.22
내일배움캠프 4일차 WIL  (0) 2024.04.19
내일배움캠프 3일차 TIL  (1) 2024.04.18