dominic31k
68
2017-11-16 10:30:15 작성 2017-11-16 10:48:04 수정됨
10
2346

method 작성 시 코딩 형태 비교


1. 

생략...

string sReturn = string.Empty;
string requestURL = GetConfig("HRSYNC_WS_URL");

if(!String.IsNullOrEmpty(requestURL))
{

  sReturn = getJson(requestURL, parameters, pSearchKey);
}
else
{
  sReturn = "FAILED|호출에 필요한 URL 정보가 존재하지 않습니다";
}

return sReturn;


2. 

생략...

string returnData = string.Empty;
string requestURL = GetConfig("HRSYNC_WS_URL");

if(String.IsNullOrEmpty(requestURL))
{
  returnData = "FAILED|호출이 필요한 URL 정보가 존재하지 않습니다";
}
else
{
  returnData = getJson(requestURL, parameters, pSearchKey);
}

return returnData;



사소한 부분인 거 같은데 메서드 작성 시에 신경이 쓰여 문의 드립니다.

보통 어떤식으로 작성하는 게 더 깔끔하고 좋은 코드 일까요?

Q1. 반환을 위한 변수 선언 시 sReturn 과 같이 앞에 string 표시를 표기하여 변수 선언하는 게 나은지
, 혹은 returnValue, returnData 와 같이 앞의 타입표기문자를 지우고 선언하시는 지

Q2. NULL체크 시, 실제 작업 수행 부분이 if 문 상단에 위치하도록 if 문에 not equal 처리 하는게 나은지
아니면 그냥 if equal 처리하고 else 문에 실제 작업 수행 부문 작성하시는 지

0
  • 답변 10

  • madlife
    2k
    2017-11-16 10:36:45

    그런게 중요하다면 pm에게 가서 어떤게나은지 물어보세요

    둘다 좋은데요

    이건그냥 취향문제네요


    sReturn 과 같이 앞에 string 표시를 표기하여 변수 선언하는 게 나은지

    라고하셨는데 string 안부치면 뭐부치나욥?

  • dominic31k
    68
    2017-11-16 10:39:34

    @madlife


    아 앞의 타입이 아니고 sReturn 에서의 s가 string 축약해서 붙여놓은건데 붙이는게 좋은가 싶어서요

    타입도 툴에서 마우스오버로 쉽게 구분가능해서


  • 무명소졸
    6k
    2017-11-16 10:42:41
    String requestURL = GetConfig("HRSYNC_WS_URL");
    if (String.IsNullOrEmpty(requestURL)) {
      return "FAILED|호출이 필요한 URL 정보가 존재하지 않습니다";
    }
    return getJson(requestURL, parameters, pSearchKey);

    저라면 이렇게 할것 같아요~

  • 초코쪼꼬
    6k
    2017-11-16 10:43:22 작성 2017-11-16 10:44:04 수정됨

    저라면.. string 변수를 안만들고 삼항연산자로 처리할거 같아요.


    그리고 뭐가 좋고 나쁘고가아니고 프로젝트마다 코드 룰? 이라는게 있습니다.

    그 룰을 따라가는게 맞겠죠?

  • onimusha
    8k
    2017-11-16 10:47:12

    1, 2  번 반대로 리턴될텐데 의도하신거에요?

    if(String.IsNullOrEmpty(requestURL)) //조건 같은데요?
  • 초코쪼꼬
    6k
    2017-11-16 10:49:06

    개행 위치도 다른거로 봐서는 변수명을 말하고자 한건데 오타 낸거 같네요.

  • dominic31k
    68
    2017-11-16 10:50:01

    @onimusha

    앗 1번에 if 문에 ! 를 빼먹었어요... 수정했습니다. 감사합니다

  • 구구구구우
    1k
    2017-11-16 11:16:09 작성 2017-11-16 11:17:11 수정됨

    제 개인적인 생각을 얘기하자면

    1. 변수명에 return 이런건 별로 안좋다고 생각합니다. 차라리 result가 나아 보이네요, 아니면 해당 데이터를 표현할수 있는 단어를 선택하는게 좋다고 봅니다.(searchData.... 코드만 봐서는 데이터가 뭔지 유추가 안되서 예를 못들겠네요.)

    s, str, string, 이런것도 절절하게 데이터를 표현할수 있는 단어를 선택했다면 굳이 적을 이유가 없다고 봅니다. 대신에 해당 데이터의 특징이 문자열임을 나타내야 할 때, 즉 대개 같은 지역 내에서 데이터는 같지만 converting을 이유로 Reference타입의 객체와 String 객체로 표현이 되어 서로의 구분용도로 str등을 명시하는거라면 괜찮다고 생각합니다. 


    2. if문 안에 들어가는 내용에 대해 보통 ! 을 쓰지 말라고 합니다. 하나로 통일 하자는 의미도 있고 가독성이 떨어지기 때문입니다. 아래구문만 보더라도 왼쪽 보다 오른쪽이 많이 헷갈립니다.

    if(String.IsNullOrEmpty(requestURL))  -> if(!String.IsNullOrEmpty(requestURL)) 

    다만 if else구문이 아닌 if문으로 끝나면 되는 상황에서의 !은 쓰는게 맞습니다. 안쓰면 if로 끝나는게 if else로 써야 하니까요. 

    오해하지 말아야 하는게

     if(String.IsNullOrEmpty(requestURL)) if(String.IsNotNullOrEmpty(requestURL))

    이 둘중에 오른쪽걸 쓰지말라는 것이 아닙니다. 저렇게 캡슐화 되어 있는 메소드의 경우 어떤것을 쓰던 무방합니다. 단지 !연산자를 보이지 않게 해야한다는거죠


    그리고 이건 취향의 문제인데 저정도의 코드라면 저 같은 경우는 3항 연산자를 더 좋아합니다. 

    string requestURL = GetConfig("HRSYNC_WS_URL");
    
    string result = String.IsNullOrEmpty(requestURL) ? "FAILED|호출이 필요한 URL 정보가 존재하지 않습니다" : getJson(requestURL, parameters, pSearchKey);
    
    return result;

    저기서 result변수에 담지않고 바로 return하기도 하죠. 이방식을 선호하는 이유는 result의 초기화 데이터에 대해서 고민할 필요가 없기 때문입니다. 작성하신 코드를 보면 result를 초기화 하려고 Empty를 쓰셨는데, 이것은 사용자가 의도한 바와 다를수 있음을 내포하고 있는거죠 

    코드를 보면 return은 getJson(), 하고 "FAIL ~~~" 이두가지 상황만은 의도하려고 있는데, 코드를 봤을때는 return은 Empty상황도 잠재적으로 내포하고 있기 때문입니다. 물론 해당 코드는 몇번을 돌려도, 2가지 상황만 나오겠죠, 하지만 코드를 대충 봤을때 3가지 상황을 가졍하고 코드를 찬찬히 읽어봐야 2가지 상황이란걸 좁힐수 있다는 겁니다. 

    이러한 측면에서 result값을 초기에 Empty로 하는것을 옳지 않을수 있습니다. 차라리 "FAIL~~~ "로 초기화 하는것이 나을테죠. 그러면 if else구문은 if문 단독으로 바꾸는 것이 더 효율적인데(다시 이미 초기화 된 항목을 다시 초기화 할 필요는 없으니까요) 하지만 이건 또 가독성이 떨어지게 됩니다. 

    그러한 연유로 저러한 상황에서 3항연산자를 많이 쓰려고 하는데 이건 취향 문제이니 이것저것 고민을 잘 해보세요








  • 구구구구우
    1k
    2017-11-16 11:21:27

    이렇게 한다면 if else구문으로도 초기화에 대해서 고민하지 않아도 되긴합니다.

    string requestURL = GetConfig("HRSYNC_WS_URL");
    
    if(String.IsNullOrEmpty(requestURL))
    {
      return  "FAILED|호출이 필요한 URL 정보가 존재하지 않습니다";
    }
    else
    {
      return  getJson(requestURL, parameters, pSearchKey);
    }
    


  • asd
    16k
    2017-11-16 11:54:32

    1. 타입을 나타내는 저런 네이밍을 헝가리언표기법이라고 하는데 요즘은 거의 안쓰이는 추세입니다. 더욱이 타입안정성이 컴파일타입에 보장되는 자바에서는 더욱 쓸필요가 없습니다. 저거 안쓴다고 문자열변수인거 모를일이 없어서요.


    2. 제가 제대로 이해한건지 모르겠는데 맞다면 그때그때 다른거같아요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.