게임 프로그래머의 만담, 게임코디 2nd
+1 vote
1k views 만담 (3kp) , 1k views
public int? GetValueA(int index)
{
    try
    {
        return dataList[index];
    }
    catch
    {
        return null;
    }
}

public int? GetValueB(int index)
{
    if (0 <= index && index < dataList.Count)
    {
        return dataList[index];
    }

    return null;
}

A방식과 B방식중 어떤 스타일을 선호하시고 왜 그 방식을 선호 하시나요.? ㅎ

만담에 대한 답글을 하려면 로그인 또는 가입해야합니다.

6 answers

+1 vote
예외를 잡아서 뭘 하면 전자로 하는데 예문은 그냥 return null이라서 후자
답글 (1.1kp)
+2 투표
외부 경계선 부분이 아닌 위처럼 내부에서 처리 부분에서는 예외를 최대한 안 쓰는 주위라서  B요(대신 early exit 방식으로)

이유는 구지 써야하는 이유, 가독성, 성능 등
답글 (1.3kp)
수정됨
0 투표
2. 그냥 손에 익숙해진 코드라...

c가 더 익숙한 올드한 스타일이라

try catch 문 자체를 잘 안 쓰게 되더군요
답글 (298p)
+2 투표
저는 B로 코딩하고 있습니다.

Exception이 발생하지 않는다면 두 스타일의 성능은 별로 차이나지 않을 수 있지만
Exception이 발생하면 A스타일은 Stack Unwinding이 발생하며 심각한 성능저하가 발생합니다.

C#에서도 int.Parse와 int.TryParse를 둘 다 지원하며 후자쪽이 예외를 발생시키지 않아 성능상 이점이 있습니다.

만은...

요즘은 Exception을 특수한 조건분기로 사용하는 방식이 꽤 있다고 듣긴 했습니다. 주로 게임이 아닌 웹쪽에서 그런다고 들은적 있네요 ㅎ
답글 (8kp)
저도 여기 한표.. Exception 처리가들은 함수는 내부적으로 여차여차(?) 해서 더 느리게 동작한다고 합니다.
구글느님이 이전에 가르쳐 주셨습니다. 사실 try,  catch 썻다고 서버가 확 느려지진 않는 것 같긴한데 프로파일링 누군가 해주시겠죵.
+3 투표
B 방식 씁니다.

예측 가능한 피할 수 있는 예외를 코딩 스타일 때문에 발생시키지는 않습니다.
답글 (58p)
+2 투표
답글 (2.1kp)
좋은 글이네요 ㅎ A번이 B번보다 값의 유효성 검사를 하지 않기때문에 조금이나마 빨랐는데.
예외가 발생한경우 현저히 느려졌습니다...

예외가 발생한경우가 잘못된거니 그냥 A번을 선택하는게 좋은가 했는데.
그 차가 너무 심하니.. ㅋㅋㅋ
예외만 안 걸리면 try, catch를 설치하는 비용보다 범위를 검사하는 비용이 더 드는군요!
c++에서는 0 나누기는 표준 예외가 아니라 OS 까지 내려가는 예외로 알고 있는데 c#은 어떤지 혹시 아시나요? C++하고 같다면 그냥 예외하고도 차이가 큰데...

게임 프로그래머의 만담 커뮤니티, 게임코디 입니다

온종일 코드와 씨름하는 우리들의 외로움을 삭이고자 합니다