가독성 높은 코드 만들기 #5 – 진행 의미가 없으면 즉시 리턴

함수에서 특정 조건이 성립하지 않을 경우 진행 의미가 없는 경우가 있습니다. 이때 즉시 리턴, 즉 함수를 바로 빠져 나가는 것이 가독성이 좋습니다.

아래 기능은 완전히 동일 하지만 코딩 스타일이 조금 다른 두 가지 예 가 있습니다.

두 함수 모두 srcPath 에서 dstPath로 파일을 복사 합니다. allowReplace는 dstPath 파일 교체 가능 여부를 의미 합니다. 여기서 srcPath 의 파일이 존재하지 않으면 함수는 정상 동작 할 수 없습니다.

아래는 즉시 return 하지 않는 경우 code 입니다.

public bool Copy(String srcPath, String dstPath, bool allowReplace){

	FileInfo srcFile = new FileInfo(srcPath);

	if (srcFile.Exists == true) { //그럼 false 이면 어떻게 동작하지?

		FileInfo dstFile = new FileInfo(dstPath);

		if(dstFile.Exists == true) {

			if(!allowReplace)
				return false;

			dstFile.Delete();
		}

		File.Copy(srcPath, dstPath);

		return true;
	}

	return false;
}

아래는 즉시 return 하는 경우 code 입니다.

public bool Copy(String srcPath, String dstPath, bool allowReplace){

	FileInfo srcFile = new FileInfo(srcPath);

	if (srcFile.Exists == false) //false 이면, 함수를 빠져 나가는 구나.
		return false;

	FileInfo dstFile = new FileInfo(dstPath);

	if(dstFile.Exists == true) {

		if(!allowReplace)
			return false;

		dstFile.Delete();
	}

	File.Copy(srcPath, dstPath);

	return true;
}

두 예에서 보시면 srcFile.Exists 를 검사하는 조건에서 차이가 납니다.

첫번째 경우 “srcFile.Exists가 true 와 false 일때 동작이 다르구나. 그럼 false 조건 일때 어떻게 동작하지? 그럼 true 조건의 코드 아래를 봐야 겠네” 라고 생각 됩니다.
그리고 true 조건에 동작하는 코드가 길어 질수록, false 조건일때 어떻게 동작하는지는 그 만큼 아래로 내려서 봐야 합니다.

두번째 경우 “srcFile.Exists가 false 이면 그냥 함수를 빠져 나가네. 그럼 아래는 모두 true 조건에 해당하는 구나” 라고 생각 됩니다.

가독성 높은 코드 만들기 #5 – 진행 의미가 없으면 즉시 리턴”의 2개의 생각

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중