티스토리 뷰
발생일: 2013.06.26
문제:
오늘 스택오버플로우 뉴스레터에 흥미로운 질문이 하나 있더라.
문제:
오늘 스택오버플로우 뉴스레터에 흥미로운 질문이 하나 있더라.
메서드명이 `try`로 시작한다면, 어떤 걸 의미하는 건지,
이에 대한 공식적인 문서가 있는 지에 대한 질문이었다.
실제로 나도 종종 `tryX` 형태의 메서드 이름을 사용했는데,
내 의도는 주로 '실패할 가능성이 있는 작업을 시도'한다는 거였다.
정말 공식적인 문서가 있는 걸까?
해결책:
위 질문은 C# 카테고리였는데,
이에 대한 마이크로소프트의 가이드가 있다.
위처럼 `tryX` 형태로 이름을 짓는 걸 `TryParse` 패턴이라 한다고 한다.
왜 하고 많은 것 중에 `TryParse`인지 정확히는 모르겠지만,
날짜나 시간 문자열을 Date 객체로 바꾸는 C#의 `Parse()/TryParse()` 메서드에서 유래된 이름인 것 같다.
여튼, 문서에서는 `TryParse` 패턴을 구현하려면,
같은 기능을 하는 두 가지 메서드를 만들면 된다고 가이드하고 있다.
첫 번째 메서드 `X`는 작업을 하고 문제가 생겼을 때 예외를 던진다.
두 번째 메서드인 `TryX`는 예외를 던지지 않는다. 대신, 성공/실패에 따른 부울 값을 리턴한다.
`TryX`에 의한 작업 결과는 추가로 전달한 out 파라미터에 저장한다.
예외 처리에 대해서도 자세히 가이드하고 있어서,
잘만 사용하면 이름만으로도 메서드의 동작을 명확하게 구분할 수 있을 것 같다.
`try`로 시작하는 메서드를 만나면,
- 이 메서드는 불리언 값만 리턴하고,
- 결과를 저장할 파라미터를 마지막 파라미터로 전달하며,
- `try`를 제외한 이름을 가진 다른 메서드가 존재할 것이다.
라는 걸 추측할 수 있을 거다.
간단하게 자바스크립트로 구현해보면 대충 이런 모습일 것 같다.
어떤 문자열을 파싱하는 메서드라고 가정해보자.
function parse(str) {
var parsed;
if (typeof str === 'string') {
// parse string
return parsed;
}
throw new Error('Parse Error');
}
function tryParse(str, result) {
try {
result.out = parse(str);
return true;
} catch (e) {
return false;
}
}
`tryX` 형태의 메서드를 호출한다면 아래처럼 사용할 수 있겠다.
var stringToParse = 'parse me';
var result = {};
tryParse(stringToParse, result);
이렇게 세세하고 꼼꼼하게, 네이밍과 함께 패턴을 정의해두면,
나중에 코드를 볼 때 저자의 의도까지 잘 이해할 수 있을 것 같다.
물론, 학습하기까진 꽤 오랜 시간이 걸리겠지만. ^^;
이런 방법 마음에 든다.
반응형
댓글
공지사항