봄꾸
1k
2020-07-07 08:06:13 작성 2020-07-07 08:13:35 수정됨
7
1080

어떤 방법이 더 깔끔한 코딩일까요?


저 같은 경우 메소드 호출 시 파라미터로 메소드 호출 결과를 바로 쓰는 것을 싫어하는 편인데
int a = Integer.parse(example.getString());
위와 같은 경우도 선호하진 않지만 모든 소스 코드에서 메소드 리턴 값을 로컬 변수로 선언 후 사용하면 소스코드가 굉장히 길어지고 과하다고 느껴져서 위의 코드 정도로  사용하는  것 까지는 읽기에 괜찮다고 생각합니다.



String words = obj.write(example.getString() + “test”, Datetimeformatter.ofPattern(“yyyy-MM-dd”).format(Localdate.now()));
메소드 리턴 값을 메소드 호출에 인자로 자로 사용하는 경우 위와 같은 경우는 그나마 낫지만 한 라인의 메소드 호출에서 로직이 조금만 복잡해져도 소스 코드를 빠르게 해석하는데 방해가 된다고 생각하는데요.

Localdatetime dt = Datetimeformatter.ofPattern(“yyyy-MM-dd”).format(Localdate.now());
String str = example.getString() + “test”;
String words = obj.write(str, dr);
저 같은 경우는 이렇게 메소드 리턴 값을 변수로 빼주고 사용하는 걸 선호하는데 메소드 체이닝은 가독성이 나쁘지 않지만 복잡하게 여러개의 메소드 호출결과를 바로 사용하는 경우는 이렇게 풀어서 작성하는 경우 남이 쓴 코드나 작성한 코드를 시간이 지나서 보았을 때 굉장히 해석하는데 도움이 되더라구요, 하지만 어떻게 생각해보면 과한 것 같기도 하고 굳이 사용하지 않을 수 있는 소스코드가 늘어나는 것이고 기준이 애매하게 느껴집니다. 대부분 사람들은 불필요한 변수 선언을 회피하는 식으로 사용하시는 것 같은데 여러분들은 어떻게 생각하시는지 궁금합니다.
0
  • 댓글 7

  • allinux
    1k
    2020-07-07 09:04:01

    저는 아래와 같이 입력 및 반환하는 타입이 동일하다면 적극 활용하는 편입니다.

    개인적으로 코드가 간결해지고 가독성도 좋다고 생각합니다.

    아무래도 fp 나 비동기(promise)가 많이 대중화 되면서 체이닝 형태를 많이 사용하는 것 같습니다.

    (1 to 10)
        .filter(_ > 5)
        .map(_ * 2)
        .sum    // 80


  • lnomadism
    1k
    2020-07-07 09:05:43

    불필요한 변수선언 문제지만, 변수선언을 안해서 가독성이 떨어진다면 마찬가지로 문제죠.

    저는 메소드체이닝이 길어진다 하면 적당한 선에서 잘라 변수에 저장해서 씁니다. 자주쓴다 싶으면 차라리 별도로 메소드화 시켜서 필요한 값만 바로 리턴받을수 있도록 만들고요,

  • zepinos
    20k
    2020-07-07 09:43:36


    String str = example.getString() + “test”;
    String words = obj.write(str, dr);


    이 부분이 내부적으로 StringBuilder 등으로 변환될지 잘 생각해보는 것도 중요합니다.

  • 인사동
    1k
    2020-07-07 10:16:20

    call by reference 이기 때문에 변수선언해서 사용하는걸 선호합니다 중간에 nullable check 도 용이하구요.

    메서드체이닝의 경우는 null 에 안전한 경우에 사용합니다.

    자작 함수가 아닌경우 내부적으로는 복잡한 로직이 많이 들어가 있습니다.

    아주 간단한 코딩들 외에는 NPE 등 잠재적 에러 부분을 막을수 있기에 그쪽을 선호합니다.

    if (example == null) {

      System.print.err("example == null");

      return;

    }

    String str = example.toString();


  • ghjgre
    998
    2020-07-07 10:25:47 작성 2020-07-07 10:40:39 수정됨

    아직 주니어 개발자이지만 저라면


    가독성과 효율성을 고려한 정적 팩토리 메소드를 굳이 인스턴스 변수에 담을 것인지 고려해 볼 것이고 함수 내에서 한 가지 일을 하고 있는 건지 확인하고 여러 가지 일을 하고 있다면 함수로 걸러낼 것 같습니다.


    보여주신 예제는 변수 명덕에 더 가독성이 떨어지는고 주석이 없으면 이해가 어려운데 주석이 필요한 시점부터 이미 잘못된 방향인 것 같습니다.


    가독성은 전체적인 맥락에서 나오는 것이지 단순 변수 선언 문제로는 판단할수 없을것 같습니다 ㅠ

  • shuak
    100
    2020-07-07 11:28:36

    윗댓에 공감합니다

    더해서 해당 클래스가 하는 역할을 생각해보아야 합니다

    저 클래스에 필요한 로직이 아니라면 헬퍼를 두어 분리하는 방법도 있고

    example 객체 내부에 로직을 두어

    example.toPurpose() 등으로 호출하는 방법도 있다고 생각합니다

  • 봄꾸
    1k
    2020-07-07 12:04:12 작성 2020-07-07 12:08:38 수정됨

    음.. 예시를 위한 소스인데 몇몇분들은 실제로 저렇게 쓰고 있는 코드를 말씀하시는줄 알고 답변해주셨네요 ㅠㅠ 단순히 리턴 값을 바로 사용하는 경우를 보여드리려고 작성한 코드입니다.

    객체 지향 설계나 문자열 연산시 생기는 문자열 상수 고려 등 많은 대답해주신분 감사합니다. 제가 설명이 부족했네요 죄송합니다. ^^;;

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