생성자에는 로직이 들어가면 안 되지
미래의 너, 현재의 동료, 미래의 동료가 생성자에 로직이 들어가는걸 안다고 확신할 수 있음?
그걸 확신시킬 수 있으면 넣어도 됨
그게 안 되면 넣지 않는거임
익명(219.241)2022-10-28 17:49
답글
로직이 들어가서 나쁠게뭔데?
이런형식에 얽매이지 말고 걍 효율적이라 생각하면 써라
가끔 보면 유교에서 성현들말씀 따르는것마냥 맹목적으로 따르는 애들있던데 그런거에 얽매이지말고
익명(175.223)2022-10-28 17:54
답글
뭔소리여 ㅋㅋ 어떤 성현이 이런 논리로 생성자에 로직 넣지 말라고 말했음? 진짜 몰라서 물어봄
생성자에 로직 넣으면 남들이 거기에 로직 들어가는지 어떻게 아는데?
메서드 만들고 네이밍 깔쌈하게 해서 거기서 로직 처리하면 되는데 왜 생성자에서 하는데?
익명(219.241)2022-10-28 17:56
답글
메서드 만들고 네이밍 깔쌈하게 한다는게 뭔말인진 알겠다. 하지만 왠지 생성자가 해야만하는 일을 다른 메서드가 대신 해주고 있는 것 같은데 기분탓인가.
토끼주문(icyselec)2022-10-28 19:06
답글
그 네이밍 단 하나때문에 생성자를 안 쓰고 메서드를 쓰는거임
만약 네 회사가 단일 레포에 1000명이 코드를 박아넣는 곳인데 생성자에 로직 넣는걸 허용하는 회사라고 생각해봐
얄짤없이 모든 생성자마다 소스 코드를 보고 로직이 있는지 확인해야됨
메서드로 SRP를 잘 지켜서 설계하면 논리적 에러가 없는 이상 소스코드를 전혀 볼 필요가 없지
익명(219.241)2022-10-28 19:19
답글
논리적에러가 없으면 생성자는 왜봄?
생성자에 로직이 있으면 모든사람들이 봐야한다는 근거가뭐임?
익명(110.70)2022-10-28 19:55
답글
왜 계속 똑같은 말을 하게 하는거지
생성자는 이름이 없다. 그리고 이름을 줄 수도 없다.
그래서 어떤 행동을 하든 생성자에서 뭘 하고 있을지 알 수가 없다.
다른 사람이 코드를 보면 응당 들어있어야 할 것같은게(e.g. verification) 없으면 생성자를 보고 확인해야 되나?
그냥 생성자에 로직을 넣지 않고 메서드에 이름을 주고 explicit하게만 하면 되는건데?
당장에 문제는 안 생기지 미래에 문제가 안 생길 가능성도 높고
근데 문제가 생기면 그걸 어떻게 찾을건데? 미래의 디버깅 하는 동료가 생성자에 로직 들어있는거 보고 열받을까 아니면 그럴만하지 ㅇㅇ 라고 생각할까
익명(219.241)2022-10-28 20:02
답글
그니까 생성자에서 쓸 로직이면 따로 볼필요가 없는 코드를 쓰는거지 뭔 따로 빼야하는 코드도 다 우겨넣으란게 아니고
계산이나 함수를 생성자에서 쓰기에 충분하다면 그걸 왜 빼야하냐고
익명(110.70)2022-10-28 20:07
답글
뭔 벽보고 얘기하는것같노 ㅋㅋㅋㅋ
익명(14.137)2022-10-28 20:11
답글
따로 볼 필요가 있고 없고는 누가 정하는데? 이건 정말 몰라서 물어봄
대부분의 경우 너가 알아서 판단하고 넣는거 아님?
너가 생각하는 생성자에 충분히 들어갈만한 계산이라는게 남들도 그렇게 생각함? 전사적인 차원에서 그러면 충분히 할만하다고 봄 이에 대해서는 전혀 반박 안함
익명(219.241)2022-10-28 20:11
답글
애초에 생성자에 로직있는걸보고 열이받을까? 이건 뭔질문인지 모르겠네 지금 당장 굵직한 오픈소스들만 봐도 생성자에서 쓸만한 계산은 생성자에서 하는데?
익명(110.70)2022-10-28 20:11
답글
예시 두 세개만 가지고 와주면 네 말에 순응하고 받아들일게
다만 생성자에서 쓸만한 계산이라는건 너무 주관적으로 들림 좀 더 구체적으로 말해주면 좋겠음
익명(219.241)2022-10-28 20:14
답글
내가 가장 신뢰하는 것은 유닉스 철학인데 제 1법칙이 한가지 일을 잘하게 하라는거야. 생성자는 객체의 생성만 잘하면 되겠지. 하지만 이건 유닉스 철학이 아님. printf 같은 명령어를 예로 들자. 형식있는 출력만 잘하면 된다. 그런데 실제로는 출력 과정을 위해 더 많은 일을 하고 있지만 유닉스 철학을 잘 따르는 것으로 사람들은 생각한다. 이유는 뭘까? 반대로 철학을 위배하게 되는 경우는 간단함. 형식있는 입력도 받을 수 있게되면 그건 더이상 한가지 일만 잘한다고 볼 수 없게됨. 생성자가 객체를 생성하기 위해 거쳐야 하는 작업이 목적에 맞다면 로직이 들어가도 되지.
토끼주문(icyselec)2022-10-28 20:15
생성자에서 복잡한 짓을 하지 말란 이유는 예외 발생 가능성 때문임
보통 객체를 생성할때 거기서 예외가 발생할 것이라고 생각하지 않음
될 수 있는 한 생성자에서는 내부 변수에 매개 변수의 값을 넣어주는 정도의 작업만 하고
정 필요하다면 팩토리 메서드를 쓰는 게 직관적임
C#(cpppp)2022-10-28 18:08
답글
감사합니다 선생님
익명(220.79)2022-10-28 18:36
단순 계산은 괜찮은데 외부에 있는 함수를 호출했다가 거기서 예외가 터지면 생성자는 어떻게 될지 생각해본 적 있어? 홀로 남겨져서 객체가 생성중인 상태로 고정될까? 물론 생성자가 함수를 호출하는 경우가 드문건 아닌데 생성자를 한번 거친 이후에 발생하는 모든 문제는 생성자가 책임져야 해.
토끼주문(icyselec)2022-10-28 19:05
답글
생성자 대신 new() -> Result 쓰자 - dc App
익명(118.235)2022-10-28 19:09
답글
무슨 언어야?
토끼주문(icyselec)2022-10-28 19:17
안되는건 아니지만, 가능하다면 하지 않는게 좋다.
익명(183.102)2022-10-28 19:51
함수호출같은게 어느정도 수준인지는 모르겠는데, 내가 예전에 파이토치나 텐서플로 소스코드 읽었을땐 거기 코드에서도 꽤 불러다썻음, AI분야 밖에 안봐봐서 원래 다른분야는 어떤지 몰?루?
ㄹㄹ(220.74)2022-10-28 21:26
상황에 따라 다르겠지만 함수형언어라는 페러다임이 만들어진 이유는 이런 개짓거리 고민 안할라고 한거니깐
걍 쓰지마셈. 아마 자바하는거 같은데, 자바개발자들도 처음 자바언어만들때 생성자는 오로지 인스턴스생성만 하게끔 했다네
이따위 고민을 유발한다는 점에서 생성자라는 개념은 쓰레기다
예외 발생할 확률 적으면 뭐든 상관없지 않나
뇌피셜) cost가 크지 않다면 괜찮다고 생각
써야할땐 당연히 써야지 ..쓸데없는 오버헤드만 안늘리면됨
생성자에는 로직이 들어가면 안 되지 미래의 너, 현재의 동료, 미래의 동료가 생성자에 로직이 들어가는걸 안다고 확신할 수 있음? 그걸 확신시킬 수 있으면 넣어도 됨 그게 안 되면 넣지 않는거임
로직이 들어가서 나쁠게뭔데? 이런형식에 얽매이지 말고 걍 효율적이라 생각하면 써라 가끔 보면 유교에서 성현들말씀 따르는것마냥 맹목적으로 따르는 애들있던데 그런거에 얽매이지말고
뭔소리여 ㅋㅋ 어떤 성현이 이런 논리로 생성자에 로직 넣지 말라고 말했음? 진짜 몰라서 물어봄 생성자에 로직 넣으면 남들이 거기에 로직 들어가는지 어떻게 아는데? 메서드 만들고 네이밍 깔쌈하게 해서 거기서 로직 처리하면 되는데 왜 생성자에서 하는데?
메서드 만들고 네이밍 깔쌈하게 한다는게 뭔말인진 알겠다. 하지만 왠지 생성자가 해야만하는 일을 다른 메서드가 대신 해주고 있는 것 같은데 기분탓인가.
그 네이밍 단 하나때문에 생성자를 안 쓰고 메서드를 쓰는거임 만약 네 회사가 단일 레포에 1000명이 코드를 박아넣는 곳인데 생성자에 로직 넣는걸 허용하는 회사라고 생각해봐 얄짤없이 모든 생성자마다 소스 코드를 보고 로직이 있는지 확인해야됨 메서드로 SRP를 잘 지켜서 설계하면 논리적 에러가 없는 이상 소스코드를 전혀 볼 필요가 없지
논리적에러가 없으면 생성자는 왜봄? 생성자에 로직이 있으면 모든사람들이 봐야한다는 근거가뭐임?
왜 계속 똑같은 말을 하게 하는거지 생성자는 이름이 없다. 그리고 이름을 줄 수도 없다. 그래서 어떤 행동을 하든 생성자에서 뭘 하고 있을지 알 수가 없다. 다른 사람이 코드를 보면 응당 들어있어야 할 것같은게(e.g. verification) 없으면 생성자를 보고 확인해야 되나? 그냥 생성자에 로직을 넣지 않고 메서드에 이름을 주고 explicit하게만 하면 되는건데? 당장에 문제는 안 생기지 미래에 문제가 안 생길 가능성도 높고 근데 문제가 생기면 그걸 어떻게 찾을건데? 미래의 디버깅 하는 동료가 생성자에 로직 들어있는거 보고 열받을까 아니면 그럴만하지 ㅇㅇ 라고 생각할까
그니까 생성자에서 쓸 로직이면 따로 볼필요가 없는 코드를 쓰는거지 뭔 따로 빼야하는 코드도 다 우겨넣으란게 아니고 계산이나 함수를 생성자에서 쓰기에 충분하다면 그걸 왜 빼야하냐고
뭔 벽보고 얘기하는것같노 ㅋㅋㅋㅋ
따로 볼 필요가 있고 없고는 누가 정하는데? 이건 정말 몰라서 물어봄 대부분의 경우 너가 알아서 판단하고 넣는거 아님? 너가 생각하는 생성자에 충분히 들어갈만한 계산이라는게 남들도 그렇게 생각함? 전사적인 차원에서 그러면 충분히 할만하다고 봄 이에 대해서는 전혀 반박 안함
애초에 생성자에 로직있는걸보고 열이받을까? 이건 뭔질문인지 모르겠네 지금 당장 굵직한 오픈소스들만 봐도 생성자에서 쓸만한 계산은 생성자에서 하는데?
예시 두 세개만 가지고 와주면 네 말에 순응하고 받아들일게 다만 생성자에서 쓸만한 계산이라는건 너무 주관적으로 들림 좀 더 구체적으로 말해주면 좋겠음
내가 가장 신뢰하는 것은 유닉스 철학인데 제 1법칙이 한가지 일을 잘하게 하라는거야. 생성자는 객체의 생성만 잘하면 되겠지. 하지만 이건 유닉스 철학이 아님. printf 같은 명령어를 예로 들자. 형식있는 출력만 잘하면 된다. 그런데 실제로는 출력 과정을 위해 더 많은 일을 하고 있지만 유닉스 철학을 잘 따르는 것으로 사람들은 생각한다. 이유는 뭘까? 반대로 철학을 위배하게 되는 경우는 간단함. 형식있는 입력도 받을 수 있게되면 그건 더이상 한가지 일만 잘한다고 볼 수 없게됨. 생성자가 객체를 생성하기 위해 거쳐야 하는 작업이 목적에 맞다면 로직이 들어가도 되지.
생성자에서 복잡한 짓을 하지 말란 이유는 예외 발생 가능성 때문임 보통 객체를 생성할때 거기서 예외가 발생할 것이라고 생각하지 않음 될 수 있는 한 생성자에서는 내부 변수에 매개 변수의 값을 넣어주는 정도의 작업만 하고 정 필요하다면 팩토리 메서드를 쓰는 게 직관적임
감사합니다 선생님
단순 계산은 괜찮은데 외부에 있는 함수를 호출했다가 거기서 예외가 터지면 생성자는 어떻게 될지 생각해본 적 있어? 홀로 남겨져서 객체가 생성중인 상태로 고정될까? 물론 생성자가 함수를 호출하는 경우가 드문건 아닌데 생성자를 한번 거친 이후에 발생하는 모든 문제는 생성자가 책임져야 해.
생성자 대신 new() -> Result 쓰자 - dc App
무슨 언어야?
안되는건 아니지만, 가능하다면 하지 않는게 좋다.
함수호출같은게 어느정도 수준인지는 모르겠는데, 내가 예전에 파이토치나 텐서플로 소스코드 읽었을땐 거기 코드에서도 꽤 불러다썻음, AI분야 밖에 안봐봐서 원래 다른분야는 어떤지 몰?루?
상황에 따라 다르겠지만 함수형언어라는 페러다임이 만들어진 이유는 이런 개짓거리 고민 안할라고 한거니깐 걍 쓰지마셈. 아마 자바하는거 같은데, 자바개발자들도 처음 자바언어만들때 생성자는 오로지 인스턴스생성만 하게끔 했다네