코드로 댓글을 작성하는 것을 싫어하는 팀원을 어떻게 처리 할 수 ​​있습니까?


182

내 팀원 중 한 명이 자신의 코드에서 의견을 말하지 않습니다.

그의 코드는 자체 문서화가 아니며 다른 프로그래머는 자신의 코드를 이해하기가 어렵습니다.

나는 몇 번이나 그의 코드에 의견을 말하도록 요청했지만, 그는 나중에 할 것이라고 변명하거나 주장 할 뿐이다. 그의 우려는 의견을 추가하는 데 너무 많은 시간이 걸리고 프로젝트가 지연된다는 것입니다.

자신의 코드를 올바르게 문서화하도록 설득하기 위해 어떤 주장을 제시 할 수 있습니까?

그 메모에서 코드 주석에 집중하는 것이 잘못 되었습니까? 아니면 해결해야 할 더 큰 문제를 나타내는 것입니까?


109
주석에 주석을 달아도 코드가 더 나아지지는 않습니다. 주석없이 코드를 이해할 수있는 경우 (이유 포함) 그렇지 않으면 주석으로 처리하십시오.
Martin York

63
예, 경쟁 조건이나 교착 상태를 해결하기 위해 코드 조각의 복잡성이 3 배가되면 이에 대해 언급하지 마십시오! 사람들이 코드가 왜 그런지, 왜 실험적인 변화를 겪으면서 신비로운 방식으로 깨지는 지에 대한 퍼즐을 풀도록하자. 모두가 동시성의 체스 그랜드 마스터가되어야합니다.
Kaz

12
@Kaz Sarcasm (나는 희망)이 텍스트로 잘 번역되지 않습니다.
deworde

10
@deworde & artjom-그렇습니다. 아니요, 가능한 한 깨끗하게 나오지 않지만 분명히 풍자입니다.

17
다음 데일 카네기의 원칙 당신은 그가 싶지 않아 언급 comment..you하지 않으려는 이유를 이해하려고 노력한다 지연 당신은 그가 다른의이되지 않을 것 언급하지 않는 경우에 그에게 말할 수 project..so을 코드를 이해할 수 있고 프로젝트를 더욱 지연시킬 수 있습니다 ..
이것은

답변:


430

주석만으로는 더 나은 코드를 만들 수 없으며 "더 많은 주석"을 누르는 것만으로도 /* increment i by 1 */스타일 주석 보다 조금 더 많은 것을 줄 수 있습니다 .

그러므로 그런 의견을 원하십니까? 이유를 이해하지 않으면 "모범 사례"가 논쟁으로 간주되지 않습니다.

주석을 사용하는 가장 놀라운 이유는 코드를 이해하기 쉽기 때문에 사람들이 주석이 부족하다고 불평 할 때 단서가없는 앵무새이거나 작업중인 코드를 이해하기가 어렵습니다.

따라서 누락 된 주석에 대해 불평하지 마십시오. 읽을 수없는 코드에 대해 불평하십시오. 또는 더 나은 방법은 불평하지 말고 코드에 대해 계속 질문하십시오. 당신이 이해하지 못하는 것은 그것을 쓴 사람에게 물어보십시오. 어쨌든 그렇게해야합니다. 읽을 수없는 코드로 더 많은 질문을 할 것입니다. 나중에 코드로 돌아와서 그것이 무엇을 올바르게 기억하는지 확신 할 수 없다면 같은 질문을 다시하십시오.

의견이 문제를 해결할 수 있고 동료에게 뇌 기능이있는 경우 언제든지 어리석은 질문을하는 것보다 코드를 주석 처리하는 것이 훨씬 쉽다는 것을 알게 될 것입니다. 그리고 질문을 할 수 없다면, 그 코드는 이미 완벽하게 읽을 수 있으며, 잘못한 사람은 결국 모든 코드에 주석이 필요한 것은 아닙니다.

사람들의 기술 측면에서, 모든 비용으로 들리거나 비난하는 소리를 피하십시오. 질문에 대해 진지하고 정직하십시오.


269
"댓글 누락에 대해 불평하지 않음 : 읽을 수없는 코드에 대해 불평하십시오"+1
Md Mahbubur Rahman

4
코드에 대한 질문에 대한 답변이 "이를 이해하기 위해 무엇을 했습니까?"
사울

40
+1 : 읽을 수있는 함수 이름을 추가하면 이점이 추가 될 수 있습니다 ... 코드 검토시 : "xg_jkhsfkasq가 수행하는 작업을 이해할 수 없습니다." "아, 기본 피드 버퍼를 플러시하고 있습니다. 이제 해제 할 수 있습니까?" "물론, flush_primary_buffer 함수의 이름을 바꿀 때까지는 주저하지 않습니다." "아, 메인 캐시도 지워서 이름이 잘못 될 수 있습니다." "IT WHATS WHAT? 캐시를 지우지 마십시오. "시스템을 정지시킬 것입니다! 그 논리를 바꾸는 동안 그 기능의 이름을 바꾸시겠습니까?"
deworde

18
코드를 읽을 수 없다는 인상을주는 것이 걱정됩니다. 비 기술적 인 관리자는 Bob의 코드가 너무 발전했기 때문에 끊임없이 'Bob'에게 도움을 요청하고 있음을 알 수 있습니다. 그것은 Bob이 '고급'개발자이고 그의 레벨에서 일할 준비가되지 않았다는 것을 의미합니다.
Rob P.

5
@Rob P. 두려움이 있지만 코드를 읽을 수없고 코드를 유지할 것으로 예상되는 경우 코드가 제대로 작성되지 않았거나 충분히 알지 못합니다. 충분히 모른다면 물어봐야합니다. 코드를 읽기가 어렵다는 메시지가 표시되면이를 밀어서 수정하십시오. 요령은 사회 공학 경로를 따라 내려갈 때 밥이 책상에 가거나 자신에게 갈 때 그것을 혼합하고 사물을 가리키는 것에 대해 적극적으로 행동하는 것입니다. 결국, 비 기술 관리자는 토론 내용 을 파악할 수 없습니다 .
deworde

114

자체 문서화 코드 또는 유용한 주석 작성에 문제가있는 많은 개발자를 만났습니다. 이런 종류의 사람들은 종종 올바른 자기 훈련이나 경험이 부족합니다.

결코 효과가없는 것은 "더 많은 의견을 추가하라고 말하는 것"입니다. 이것은 자기 훈련이나 경험을 증가시키지 않을 것입니다. IMHO가 효과가있을 수있는 유일한 것은 빈번한 코드 검토 및 리팩토링 세션을 만드는 것입니다. 개발자가 작업을 완료하면 이해하지 못하는 코드의 일부를 설명 할 수 있습니다. 6 개월 후에 모두 이해할 수있는 방식으로 코드를 즉시 리팩토링하거나 문서화하십시오.

적어도 일주일에 두 번, 몇 개월에 걸쳐 이것을하십시오. 운이 좋으면 다른 개발자가 이러한 세션을 통해 학습하므로 검토 빈도를 줄일 수 있습니다.


5
+1 이것이 내가 찾은 동료에게 실제로 변경 사항을 구현하고 실제로 그들과 함께 앉아 그들과 함께 검토 / 리팩토링하는 유일한 방법입니다. 코드 검토를 거부 할 수있는 위치에 있지 않으면 어려울 수 있습니다. 때때로 당신이 중간 단계에있을 때 당신은 노인들에게 문제를 제기해야합니다. 만약 그들이 당신이 노인이 될 때까지 코를 gri 지 않으면 그러한 쓰레기를 거부 할 수 있습니다
Jimmy Hoffa

1
코드 검토 및 페어 프로그래밍은 팀에서 개발자의 전반적인 표준을 향상시키는 데있어 가장 좋은 방법입니다. 팀 내에서 지식과 기술을 공유하는 것입니다. 그것 없이는 개발자가 어려운 길을 배우게하고 그들이 대학에서 온다고 가정합니다. 업계에서 이러한 관행의 일반적인 부족은 아마도 10 년 이상의 경험을 가진 많은 개발자들이 읽기 쉽고 체계적인 코드를 작성할 수없는 이유 일 것입니다.
Martin Brown

27

아직 아무도 코드 리뷰를 언급하지 않은 것에 놀랐습니다. 코드 검토를 수행하십시오! 그가 품질이 좋지 않은 것으로 확인되면 "댓글 추가"라고 말하지 마십시오. 끊임없이 질문을하고 그의 코드의 역할과 이유를 알려주십시오. 필기를하다. 그런 다음 코드 검토가 끝날 때 메모 사본을 제공하고 질문을 명확하게 해달라고 지시하십시오. 더 많은 의견이나 코드를 리팩토링하여 더 나은 품질을 얻으십시오 (가능하면 후자를 선호하십시오)


2
+1-코드의 어떤 부분에 대해 질문을해야하는 경우 해당 부분에는 주석이나 리팩토링이 필요하므로 나중에 다른 사람이 질문 할 필요가 없습니다.
Dunk

+1 또한 놀랍게도 코드 / 피어 리뷰는 답변이 너무 낮습니다. 팀 수준의 코드 검토를 구현하면 (개인을 고르지 않기 위해) 문제를 해결하는 데 도움이 될 수 있습니다. 극단적으로 당신은 다른 팀원이 변경 사항을 검토하지 않는 한 푸시 금지 정책을 구현할 수 있습니다.
Chris Lee

회사의 @ChrisLee 코드 검토 정책은 기술적으로 시행되지 않지만 스토리를 테스트 준비 중으로 표시하기 전에 개발 작업을 수행 한 사람에 관계없이 코드를 검토해야한다는 정책이 있습니다. CTO가 체크인 할 때 코드를 검토해야한다는 것은 매우 흥미 롭습니다. lol
Earlz

18

이는 팀원이 생성 한 코드에 따라 다릅니다. Uncle Bob 의 Clean Code 책 을 읽으면 실제로 코드에 주석을 추가 하지 않는 것이 좋습니다. 코드 자체가 읽을 수있는만큼 읽을 수 있으면 주석이 거의 필요하지 않습니다.

그렇지 않은 경우 또는 협상 할 수없는 일부 정책으로 인해 의견이 필요한 경우 주된 질문은 자신이 의견을 쓰려는 사람 또는 전체 팀 또는 팀 / 프로젝트인지 여부가됩니다. 리더. 그것이 단지 당신이라면, 당신은 왜 그렇게 큰 일이 아닌지 알아 내기 위해 다른 동료들과 이야기해야합니다.

프로젝트 리더가 주석이 없으면 완성도의 일부로 주석을 요구할 수도 있습니다 . 즉 제출 된 코드에 주석이없는 경우 작업이 아직 완료되지 않았습니다. 그는 현재 작업이 완료되고 주석이 필요할 때까지 다른 작업을 계속하지 않을 수 있습니다. 그러나 이러한 종류의 강제는 아마도 끔찍한 주석으로 이어질 것입니다 (크 래피 반복 코드 주석의로드가 예상 됨).

내 겸손한 의견에서 유일하게 가능한 방법은 당신과 다른 사람들이 의견에서 얻는 실제 이익을 논의하는 것입니다. 토론만으로 이해하지 못하면 항상 어려운 방법이 있습니다. 새로운 코드를 작성하는 대신 기존 코드에서 작동하도록하십시오. 가능하면 적절한 유용한 주석이있는 주석과 주석이없는 두 가지 작업 영역을 찾아야합니다. 다른 사람이 읽을 수없는 주석 처리되지 않은 코드를 읽어야하는 것은 자신의 작업과 관련하여 눈에 띄는 부분입니다.

우리는 모두 한 번 거기에 있었고 너무 조잡하게 일한 일부 출처의 원저자에게 화가났습니다. 우리 각자가 가독성에 관심을 가져야한다는 사실을 깨닫게 해주는 저자이기도하다. 따라서 나중에이 성찰을 홍보하기 위해 동료들과 결과를 논의하는 것을 잊지 마십시오.


댓글의 실제 수익에 대해 +1 주석은 소스 코드에 가치를 더하기위한 것입니다.
Sparky

1
다시 : "이런 종류의 강제는 아마도 끔찍한 의견을 초래할 것입니다." 코드를 작성하는 동안 주석을 달지 않으면 코드를 작성한 후 주석을 백필하면 거의 믿지 않든 끔찍한 주석이 생깁니다. 코딩 할 때는 특정 방식으로 무엇을하고 있는지 정확히 아는 시간입니다. 다른 사람들에게 알려야 할 때입니다. 작업을 마친 후에 댓글을 작성하면 코드를 작성할 때 생각했던 내용을 기억하지 못할 가능성이 높으므로 댓글 작성을 위해 쓸모없는 댓글을 던지는 경향이 있습니다.
Dunk

3
항상 그 책의 접근 방식에 문제가있었습니다. 주석은 v. 깨끗한 코드가없는 비즈니스 프로세스 / 논리 (또는 이유)를 설명하는 데 유용 할 수 있습니다.
bharal

코드에 주석은 필요하지 않지만 Javadoc
Danubian Sailor

2
Clean Code는 괜찮은 책이지만 복음으로 취급되어서는 안됩니다. 상식을 적용하고 효과가있는 것을 스스로 결정해야합니다. 프로그래밍 언어는 이유와 관련하여 문제가 발생하는 방식을 표현하는 데 중점을두기 때문에 의견에 대한 조언에 동의하지 않습니다. 제품 SKU에 국가 코드를 추가하는 Google 쇼핑 용 코드를 작성하고있었습니다. 코드가 무엇을하고 있는지는 분명하지만, 다른 시장에서도 같은 제품 코드를 한 번만 사용할 수 있다는 것을 알지 못하면 내가 왜 이런 짓을했는지 알 수 없습니다. 내가 추가 한 의견은 그것을 명확하게합니다.
GordonM

10

지시 사항을 따르지 않는 직원이있는 경우, 그를 질책하고 그의 경력 발전에 도움이되지 않는 것이 분명해야합니다. 코딩 스타일의 일관성은 팀에게 중요하며, 다른 사람들이 주석을 작성하고 있고 그렇지 않은 경우 코딩 스타일이 손상 될 수 있습니다.

즉, 아마 그를 도울 수 있습니다. 내 경험상 누군가가 논평에 너무 많은 시간걸린다는 항의를하면 다음 과 같은 심리적 장벽이있다.

  1. 그는 자신의 코드 / 디자인 선택에 대해 자의식을 갖고 있으며, 그것들을 산문에 배치하고 싶지 않습니다. (코드 검토는 누군가의 자신감을 잃어 버릴 정도로 자신감을 높이는 데 도움이 될 수 있습니다.)
  2. 그는 매우 선형 적으로 일하고 많이 생각하지 않습니다. 주석 처리는 다른 방식으로 의도를 작성하기 위해 작업 메모리에서 작성하려는 즉시 코드를 언로드해야하기 때문에 고통 스럽습니다. (이것이 사실이라면, 주석 처리는 코드 품질에있어 매우 중요합니다.)
  3. 역사적으로 사람들은 그의 의견을 이해하지 못합니다.

프로그래머는 주석이 테스트와 같다는 것을 인식하는 것이 중요합니다. 주석은 나중에 사용하기위한 것이 아니라 프로그래머 자신을위한 것입니다. 그들은 그의 접근 방식에 대해 다르게 생각하도록 강요합니다.

이 중 어느 것도 CI, 테스트 또는 코드 검토를 대체하지 않습니다. 그것은 코드를 작성하는 것이 아니라 코딩 자체의 많은 중요한 부분 중 하나 일뿐입니다.


3
나는 위협이 반드시 효과적 일 것이라고 생각하지 않으며, (의도적이지 않더라도) 괴롭힘을 당할 수 있으며 일반적으로 코더는 고위층의 칙령을 원망하는 경향이 있으며,이 경우 그는 단지 그의 발 뒤꿈치를 훨씬 더 파다. 그것은 최후의 수단으로, 그러나 최후의 수단으로 올 수도 있습니다.
GordonM

@ 고든 (GordonM) 직원의 행동이 부적절 할 때 직원에게 알리지 않는 것이 좋으며 계속되는 부적절한 행동의 결과는 무엇이라고 생각하십니까?
kojiro

아무 말도하지 않는 것이 분명 좋은 생각은 아니지만, 사람들을 위협하는 것은 단지 논평 스타일과 같은 상대적으로 사소한 일에 대해 두려움의 분위기를 조성 할 것입니다. 당신이 그에게 합리적으로 설명하면 왜 팀이 주석을 중요하게 생각하는 것이 좋습니다. 그러나 누군가가 비교적 사소한 것에 대한 자루로 나를 위협했다면 대신 다른 직업을 찾기 시작하는 경향이 있습니다.
GordonM

@ GordonM 나는 실제로 내가 말한 것이 위협하고 있다는 암시를 제외하고는 어쨌든 그것을 고쳤다.
kojiro

8

코드 검토 소프트웨어를 받아 잘 사용하십시오.

우리는 킬른을 사용하고 그것을 좋아합니다. 모든 변경 세트를 검토해야한다는 정책이 있습니다 (개발자는 태그 및 충돌없는 병합에 대해 스스로 검토를 승인 / 승인 할 수 있지만 (대부분의 경우 rebaseif를 사용하지만),이를 통해 검토없이 변경 세트를 신속하게 파악할 수 있습니다).

명확하지 않은 코드는 코드 검토가 거부 된 이유입니다. 수정 사항이 주석인지 또는 더 명확한 코드인지는 중요하지 않지만 검토자는이를 이해할 수 있어야합니다. 일부 개발자는 코드를 다시 작성하는 것을 선호하지만 다른 개발자 (자체 포함)는 종종 의견에 의도를 표현하는 것이 더 쉽다는 것을 알게됩니다 (코드는 코드가 수행하는 작업을 쉽게 표시 할 수 있지만 수행 해야 할 작업 을 표시하는 것이 더 어렵다 ).

코드의 명확성에 대한 의문이 있으면 검토자가 항상 이깁니다. 물론 저자는 그것을 썼기 때문에 그것을 이해합니다. 다른 사람에게는 분명해야합니다.

킬른과 같은 소프트웨어를 사용하면 변경 세트를 간과 할 수 없습니다. 내 개발자 팀의 모든 사람들 이이 방법을 선호합니다. 코드 검토 소프트웨어는 코드 품질과 응용 프로그램 품질 모두에 큰 영향을 미쳤습니다. :-)

개발자가 소프트웨어를 처음 소개 할 때 거부 된 리뷰로 방어하기가 쉽지만 내 경험상 이러한 방식으로 더 나은 것을 깨닫고 수용하는 데 오랜 시간이 걸리지 않습니다.

편집 : 또한 주목할 가치가있는 것은 개발자가 암호 코드를 구두로 설명하거나 리뷰에 주석으로 설명하지 않도록 노력한다는 것입니다. 명확하지 않은 부분이 있으면 코드를 설명하는 가장 좋은 곳 (코멘트 또는 리팩토링)에 새 변경 세트를 동일한 검토에 추가하십시오.


4

흥미롭게도, 자연어에 적용되는 가독성 은 읽기 속도와 이해력에 의해 측정됩니다. 간단한 규칙을 실제로 적용 할 수 있다고 생각 합니다. 특정 코드 주석 으로이 속성을 개선하지 않으면 피할 수 있습니다 .

왜 댓글이 있습니까?

코드 주석은 내장 문서의 한 형태이지만 고급 프로그래밍 언어에는 언어 자체의 요소를 사용하여 불필요한 "과도하게 문서화 된"프로그래밍 (의미있는 코드)을 피하는 여러 가지 방법이 있습니다. 코드를 프로그래밍 교과서에서 리스팅으로 바꾸는 것도 좋지 않은 생각입니다. 개별 문장은 문자 그대로 거의 팽팽한 방식으로 설명되어 있습니다 (이미 제공된 답변에서 "/ * i를 1 * /"로 예)). 언어에 익숙하지 않은 프로그래머에게만 해당됩니다.

그럼에도 불구하고, 진정으로 "모든 악의 근원"인 "언급되지 않은"(그러나 의미가없는) 코드를 언급하려고 시도합니다. "문서화되지 않은"코드가 존재한다는 것은 잘못된 신호입니다. 이것은 구조화되지 않은 혼란이거나 신비한 목적의 엉뚱한 핵입니다. 분명히, 그러한 코드의 가치는 적어도 의문의 여지가 있습니다. 불행히도 새로운 서브 루틴으로 감싸는 것보다 (시각적으로 그룹화 된) 형식의 코드 라인에 주석을 추가하는 것이 더 좋을 때 항상 예제가 있습니다. .

코드 가독성! = 코드 주석

읽을 수있는 코드에는 주석 별 주석이 필요하지 않습니다. 코드의 각 특정 위치에는 항상이 특정 코드가 수행해야하는 작업의 컨텍스트가 있습니다. 목적이 없거나 코드가 신비한 일을한다면 = 모든 비용을 피하십시오. 이상한 해킹으로 코드를 채우지 마십시오. 버그를 일으키는 기술을 시간 / 관심 부족과 결합하여 기초를 이해 한 직접적인 결과입니다. 프로젝트에서 신비로운 코드를 피하십시오!

반면에, Readable program = code + documentation 에는 "API에 대한 주석"문서 생성을 용이하게하기 위해 여러 합법적 인 주석 섹션이 포함될 수 있습니다.

코드 스타일 표준 준수

문제는 코드에 주석을 달아야하는 이유가 아니라 팀 작업에 관한 것입니다. 동기화 된 스타일로 코드를 생성하는 방법 (다른 사람이 읽고 이해할 수 있음). 회사의 코드 스타일 표준을 따르고 있습니까? 리팩토링이 필요하고 너무 "개인적"이고 "주관적으로"모호한 코드 작성을 피하는 것이 주된 목적입니다. 따라서 코드 스타일을 사용해야 할 필요가 있다고 판단되면 사람들을 교육하고 코드 품질 관리를 위해 자동화로 끝나는 (수 많은 보푸라기 등) 및 (수정) 제어 통합) 코드 검토 시스템.

코드 가독성 전도자가 되십시오

코드를 작성하는 것보다 더 자주 읽습니다. 의사 소통을 위해 어떤 언어를 사용하든 (수학, 기계 코드 또는 구식), 생각과 생각을 명확하게 표현하는 것이 중요합니다. 미션과 추악한 대안 적 사고 방식을 근절하는 것이 사명이라면 .. (죄송합니다. 마지막 질문은 다른 "매니페스트 (manfest)"에서 온 것입니다. ) 모호성을 다루는 코드 정리 (아마도 Beck의 디자인 패턴과 비슷할뿐만 아니라 RC Martin이 이미 언급 한 것)에 관한 책을 발굴하기 시작 합니다. 프로그래밍에서. 더 나아가 핵심 아이디어의 요점을 옮깁니다 (O'Reilly의 가독성에 관한 책에서 인용)

  • 모든 코드 줄에 적용되는 팁으로 이름 지정, 주석 달기 및 서식 지정을 단순화
  • 복잡성과 혼란을 줄이기 위해 프로그램의 루프, 논리 및 변수를 개선
  • 한 번에 하나의 작업을 수행하도록 코드 블록 재구성과 같은 기능 수준의 공격 문제
  • 읽기 쉽고 철저하고 간결한 효과적인 테스트 코드 작성

"댓글 작성"을 자르면 여전히 많은 내용이 남습니다 ( 댓글필요없는 코드 작성 은 훌륭한 운동 중 하나입니다!) 의미 적으로 의미있는 식별자의 이름을 지정하는 것이 좋습니다. 다음으로 논리적으로 연결된 작업을 함수와 클래스로 그룹화하여 코드를 구성합니다. 등등. 더 나은 프로그래머는 더 나은 작가입니다 (물론 다른 기술을 전제로 가정).


재미를 위해서만 주석이 필요없는 코드를 작성할 수 있습니다. 이것은 실제로 훌륭한 연습 일 수 있지만 코드로 돌아와야 할 때이 기능이 왜 작동하는지 알 수 없기 때문에 실제로 변경할 수없는 경우에는 그렇지 않을 것입니다. 물론 프로젝트 외부에서 문서화되고 추론 된 프로젝트의 1 %에 해당 할 수도 있지만 코딩 중에 결정을 내리면 문서로 다시 전달되지 않습니다. 그리고 솔직히 ... 누가 코드에없는 문서를 읽습니까? 확실히 프로그래머가 아닙니다 ;-P.
Nux

1
좋은 엔지니어는 전체 시스템에 대한 관심 (포함 문서를 비는-codegenerated.) - 그러나 여기에서 우리는 일반적으로 물론, 마음 코딩의 .. 코드 호출에 식별자를 가지고 있지 내 포인트가되는 foo는 , , tmpSomething2IamJustTooSmartAssToCare은 이미 개선 상황과 코드가 무엇이며 코드가 무엇인지 설명해야 할 전반적인 필요성이 줄어 듭니다. 코드는 사람이 읽고 이해하고 재사용하고 유지하는 잘 설계된 API와 같이 "생각 모드 켜기"로 작성해야합니다. 코드에서 이해하기 어려운 주석이 너무 많으면 매우 나쁜 신호입니다!
Yauhen Yakimovich

HACK 또는 "임시"버그 수정 형태의 모든 유형의 도메인 특정 로직을 BTW 프로그래밍 / 인코딩하면 실제로 "이상한 HACK"가 생성됩니다. 실패하고 다시 발사하십시오. 이것은 "실제 세계"프로젝트 등의 마감일로 정당화 될 수 있습니다. 그러나 실제로 도메인 논리의 리모델링이 필요한 (또는 새로운 직업을 찾는) 저렴한 소프트웨어 일뿐입니다.
Yauhen Yakimovich

가독성이 중요하다는 데 동의합니다. 제가 동의하지 않는 것은 "가독성을 우선 순위로 설정하면 설명이 필요하지 않습니다"라고 말하는 것 같습니다. 그것은 사실이 아닙니다. 거기에 있었다. 당신이하는 일을 추론하는 것은 단지 감각을 일으키는 방식으로 변수의 이름을 지정하는 것이 아닙니다. 물론이를 수행하되 주석에 이유를 추가하십시오 (일부 외부 시스템에서 버그 / 요구 사항 / 스토리 번호의 형태 인 경우에도). 그것이 내가 말하는 것입니다.
Nux

"가독성을 우선시하는 경우 주석이 필요하지 않습니다."-예, 정확히 내가 말하는 것을 말합니다 (이는 달성하기 쉽지 않은 것으로 알고 있습니다). BTW 완전한 커밋 (버전 제어) 히스토리를 유지하는 것이 "버그 / 요구 사항 / 스토리 번호"에 반영하기에 충분하지 않은 상황이 있습니까? 나는 약간의 커밋을 연습 해왔다-나를 위해 일하고 개발 역사에서 코드를 비워 둘 수있게한다. 유기적으로 덜 자란다.
Yauhen Yakimovich

3

코드 주석에 집중하는 것이 잘못 되었습니까 아니면 해결해야 할 더 큰 문제를 나타내는 것입니까?

약간. 훌륭한 코드에는 주석이 필요하지 않습니다. 그러나 말했듯이 그의 코드는 자체 문서화가 아닙니다. 그래서 나는 의견에 집중하지 않을 것입니다. 개발자의 기술과 장인 정신 향상에 중점을 두어야합니다.

그렇게하는 방법? 검토 / 리팩토링 세션에 대한 Doc Brown의 제안은 좋은 생각입니다. 페어 프로그래밍이 훨씬 효과적이지만 구현하기가 훨씬 더 어려울 수도 있습니다.


페어 프로그래밍은 훌륭한 아이디어이며 다른 프로그래머가 코드 개발에 대한 통찰력을 제공하여 진행 상황을 알 수있게하여 두 사람이 코드를 책임지게합니다. 또한 두 가지 중 하나가 평범하지 않거나 다른 사람이 "메모리 누수", "나쁜 코딩"처럼 보이기 때문에 변경 될 수 있기 때문에 설명이 있어야한다고 말할 기회를줍니다. 등등. 어떤 것들은 주석을 달아야하므로 앞으로 다른 사람은 옳지 않아 보이기 때문에 무언가를 취소하지 않습니다.
Malachi

3

우선, 의견에 대한 접근 방식을 다시 주소 지정하는 것이 좋습니다.

API 수준에서 문서 주석 인 경우 (나중에 공개됨)이 개발자는 자신의 작업을 수행하지 않습니다. 그러나 다른 모든 의견에는주의하십시오.

내가 만나는 대부분의 경우, 의견은 악하다. Robert Martin"Clean code" 코드 주석 장을 읽고 그 이유를 이해하는 것이 좋습니다.

주석은 여러 가지 방법으로 코드를 손상시킵니다.

1) 그들은 유지하기 어렵다. 리팩토링시 추가 작업을 수행해야합니다. 주석에 설명 된 논리를 변경하면 주석도 편집해야합니다.

2) 그들은 종종 거짓말을한다. 주석을 신뢰할 수 없으며 대신 코드를 읽어야합니다. 어떤 질문이 생깁니 까 : 왜 의견이 필요할까요?

// this method returns the sum of 'a' and 'b'
public int GetHash(int a, int b)
{
    //the calculation of the hash
    int result = a*b;
}

(해시는 합계가 아니라 제품입니다.)

3) 주석은 코드를 복잡하게 만들고 값을 거의 추가하지 않습니다.

내 해결책 : 더 많은 의견을 추가하는 대신 전혀 제거하십시오!


4
이것은 단지 바보입니다. 그런 나쁜 논평 스타일이 도움이된다고 아무도 믿지 않기를 바랍니다. 하지만 솔직히 의견을해야한다고 믿는다 결코 사용하지?
jmk

1
그러나 이것은 어리석은 제안입니다. 코드를 믿을 수 없을 정도로 읽을 수 있다면 의견을 거의 이해할 수는 없지만 의견을 보면 메소드가 왜 작동하는지 왜 몇 가지 클래스 이상에 도달하면 어떻게 사용될지를 말해야합니다. 의견이없는 이유없이 그들은 모두를 돕는다.
DBlackborough

3
기억해야 할 중요한 점은 지금 당장 모든 것이 이해가되지만 다른 사람은 3 년 안에 코드를 유지해야한다는 것입니다. 오버 나사를 조이지 마십시오.
xaxxon

4
@xaxxon 그 사람이 당신 일지라도 사과는 말할 것도 없습니다.
푹신한

3
@mehaase- 코드에 주석을 추가 해야하는 가장 중요한 이유는 무엇이 아니라 어떻게, 왜입니까 ?
Henk Langeveld

1

팀원이 어떤 이유로 든 다른 팀원의 코드를 이해하는 데 어려움이있는 경우 그런 다음 해당 팀원은 원래 코드를 작성한 사람을 찾을 수 있어야하며 (모든 제정신 개정 제어 시스템) 코드 작성자에게 직접 설명하도록 요청해야합니다 (예 : 책상으로 걸어 가서 앉아 토론).

이 경우에, 주석이 부족한 것이 문제라면, 코드에 적절하게 주석을 달지 않은 사람은 자신이 한 일을 설명하는 데 많은 시간을 할애 할 것입니다. 똑똑한 경우 모든 설명에 시간을 소비하지 않기 위해 설명을 추가하기 시작합니다.

팀원들이 서로에게 설명을 요청하도록 장려하는 것은 다른 이유로 귀중합니다. 예를 들어, 팀 구성원이 경험이 부족하고 숙련 된 팀 구성원으로부터 내용을 배울 수 있습니다.

대부분 팀 구성원이 서로에게 설명을 요구하도록 장려함으로써 자기 균형 시스템을 만들 수 있습니다. 서로 다른 팀 구성원이 서로 "자동 조정"됩니다.


1

이것은 대체로 tdammers 답변의 확장이지만 정기적으로 코드 검토를 수행합니다.

그를 (그리고 다른 개발자들) 앉히고, 코드를 살펴보고, 상사와 동료 앞에서 방어하는 것은 모든 사람들을 더 나은 코더로 만들고 상대적으로 짧은 기간 동안 실제 가치를 더할 것입니다. 단기적으로는 검토 시점에 문제의 개발자가 자신의 코드를 적절하게 언급 할 이유가 없습니다.

편집 : 누군가가 내 제안을 내리는 이유에 대해 확신 할 수 없습니다. 코드 검토의 이점이 일반적인 지식이라는 점을 당연하게 생각했을 것입니다 ...이 실습에 대한 커뮤니티 분석에 대해서는이 스레드를 참조하십시오.

코드를 검토하는 것이 좋습니다?


사람들로 가득 찬 방에서 읽을 수없는 코드를 비웃기 시작하면 코딩과 주석 처리 작업을 더 잘 시작할 수 있습니다. :) 나는 코드 리뷰를 크게 옹호합니다.
Evik James

1
사람들이 다른 동료들 앞에서 코드를 비웃는 것은 할 수있는 길이 아닙니다 :-\
Danny Tuppeny

1
코드 검토를하는 사람들이 건설 적이기보다는 웃으면 읽을 수있는 코드를 작성할 수없는 개발자만큼 훈련이 필요합니다. 비판적이기보다는 건설적인 비판을받는 것은 개발자들이 종종 부족한 사회적 기술 중 하나입니다.
Martin Brown

1

댓글 달기에 대한 극단적 인 견해를 고려할 때 주저하지 말고 말씀해주십시오.

읽을 수없는 코드를 작성하려는 경우 올바르게 문서화해야한다는 주장은 무엇입니까?

유지 관리 가능하고 읽을 수있는 코드 작성 방법을 이해하려면 시간, 실습 및 경험이 필요합니다. 경험이없는 프로그래머 (그리고 슬프게도 많은 숙련 된 프로그래머)는 종종 이케아 효과 ( PDF )로 고통 받고 있습니다 . 그것은 그것들이 그것을 만들고 친숙하게 친숙하기 때문이며, 코드가 훌륭 할뿐만 아니라 읽을 수 있어야합니다.

사람이 훌륭한 프로그래머라면 문서가 필요한 경우는 거의 없습니다. 그러나 대부분의 프로그래머는 훌륭하지 않으며 많은 코드가 "준비"부서에서 어려움을 겪을 것입니다. 평범한 개발자 나 개발자에게 "코드를 설명"하도록 요청하는 것은 코드를보다 중요한 시각으로 보도록 강요하는 데 유용합니다.

이것이 코드를 "문서화"한다는 의미입니까? 반드시 그런 것은 아닙니다. 예를 들어, 과거 에이 문제와 비슷한 프로그래머가있었습니다. 나는 그를 문서화하도록 강요했다. 불행히도 그의 문서는 그의 코드만큼 해독 할 수 없었으며 아무것도 추가하지 않았습니다. 돌이켜 보면 코드 검토가 더 도움이되었을 것입니다.

귀하 (또는 대리인)는이 프로그래머와 함께 앉아 이전 코드 중 일부를 가져와야합니다. 그가 일하는 것만으로 그가 아는 ​​새로운 것은 아닙니다. 최소한의 상호 작용으로 코드를 안내하도록 요청해야합니다. 이것은 또한 별도의 "문서화"세션 일 수 있으며 여기서 코드 작성시 설명해야합니다. 그런 다음 더 나은 접근 방식에 대한 피드백을 받아야합니다.

제쳐두고 ... 코드의 "준비성"이 얼마나 좋은지에 관계없이 일부 문서가 필요한 경우가 있습니다. API에는 문서가 있어야하며, 매우 기술적이고 복잡한 작업에는 프로그래머가 관련 프로세스 (종종 프로그래머 영역 외부에서)를 이해하는 데 도움이되는 문서가 있어야하며 복잡한 정규 표현식과 같은 일부 항목은 실제로 일치하는 내용을 문서화해야합니다.


0

많은 프로젝트에는 인터페이스 문서, 디자인 문서 등의 코드 문서가 필요합니다.

일부 프로젝트에서는 이러한 문서를 코드 주석에 넣고 Doxygen, Sphinx 또는 Javadoc과 같은 도구로 추출하여 코드와 문서의 일관성을 유지해야합니다.

그렇게하면 개발자는 코드에 유용한 주석을 작성해야하며이 의무는 프로젝트 계획에 통합됩니다.


6
아니, 그런 식으로 개발자가 작성하는 데 필요한 몇 가지 의견을. 정책이 강력하게 추진 될 경우, 그것들을 쓰라 는 압력에 따라 그것들의 유용성은 감소하고, 종종 0 아래 로 적극적으로 유해한 지역으로 가라 앉습니다 (유효하지 않은 의견 의견 없는 것보다 더 나쁩니다).
Jan Hudec

1
@ JanHudec-동의합니다. 따라서 일부 제어를 설정해야합니다. 자동 생성은 예를 들어 코드의 함수 인수가 주석에서와 동일하도록합니다. 또한 소스 파일 디렉토리 대신 단일 PDF를 사용하면 더 많은 사람들이 문서를보다 읽기 쉽게 읽을 수 있습니다.
mouviciel 2013

2
글쎄요, 그렇지 않습니다. .pdf에서 코드가 실제로 설명과는 미묘하게 다른 것을 수행한다는 것을 어떻게 알 수 있습니까?
Jan Hudec

1
어쩌면 내 의견은 모든 것이 검토, 제어, 확인, 두 번 또는 세 번 또는 네 번 테스트되는 공간에 중요한 소프트웨어 인 내 도메인에 의해 편향 될 수 있습니다. 자동 문서 생성은 불일치를 억제하지 않지만 문서를 줄이는 데 도움이됩니다.
mouviciel

예, 당신은 강하게 편향되어 있습니다. 그런 의미에서, 대부분의 단위 테스트는 QA에 충분하며 모든 마지막 기능을 문서화하는 것은 시간 낭비입니다.
Jan Hudec

0

나는 대부분의 답변과 의견이 암시하는 것을 언급 할 것입니다. 인식 된 솔루션을 통해 추진하기보다는 실제 문제를 파악해야 할 것입니다.

그의 코드에서 주석을 보도록 동기를 부여합니다. ? 당신은 이유를 주었다; 그 이유 그렇게 중요합니까? 그는 대신 다른 일을하도록 동기를 부여했다. ? 그는 이유를 제시 할 것이다. 그 이유 그렇게 중요합니까? 갈등이 실제로 발생하는 수준에 도달 할 때까지이 과정을 반복하고 둘 다 함께 살 수있는 해결책을 찾으십시오. 나는 주석 처리와 관련이 거의 없을 것입니다.


0

좋은 코딩 표준을 따르는 경우 최소한의 주석이 필요합니다. 명명 규칙이 중요합니다. 메소드 이름과 변수 이름은 역할을 설명해야합니다.

내 TL은 적은 의견을 사용하도록 제안합니다. 그는 내 코드가 이해 가능하고 자기 설명 적이기를 원합니다. 간단한 예 : 검색 패턴에 사용 된 문자열 유형의 변수 이름

   var str1:String="" //not uderstandable
   var strSearchPattern:String="" //uderstandable

0

코드 검토 답변을 좋아하지만 아마도 내 프로세스가 약간 도움이 될 것입니다.

나는 주석을 좋아하지만 첫 패스에서 코드에 주석을 추가하지는 않습니다. 어쩌면 그것은 내 스타일 일 수도 있지만 개발 중에 리팩토링, 테스트 작성 등의 코드 섹션에서 3 ~ 5 번 같은 부분을 칠 것입니다.

약간 혼란 스러울 때 또는 누군가가 코드 섹션에 대해 질문 할 때마다 그것을 이해하려고 노력합니다.

혼란스러운 연산 세트를 제거하는 주석을 추가하는 것만 큼 간단하거나 새로운 객체 추출과 같은 더 큰 리 팩터를 트리거 할 수 있습니다.

그룹의 모든 사용자가 자신의 코드를 다른 사람이 읽을 수 있도록 "소유"하도록 권장합니다. 즉, 누군가 코드에 대한 질문을 할 때마다 변경을 약속하거나 더 나은 방법으로 연결해야합니다. 바로 변경을 할 사람!

"팀 계약"의 일부로이를 추진할 것을 진지하게 고려하십시오 (그리고 계약이없는 경우 계약을 작성하십시오). 모든 사람이 계약에 동의하고 계약서를 벽에 갖도록하는 것입니다. 동의 한 것에 대한 질문이 없습니다.


0

어쩌면이 사람은 좋은 코딩 규칙에 대한 감사를 받아야하며 다른 사람들이 자신이 작성한 코드를 이해하는 것이 중요한 이유를 이해해야합니다.

나는 경력에서 정말 끔찍한 코드베이스, 코드가 너무 잘못 구성되고 변수 이름이 너무 좋지 않고 주석이 너무 나쁘거나 존재하지 않아 코드베이스가 내 생산성에 해를 끼쳤다 고 생각했습니다. 이해하지 못하는 코드베이스를 수정하거나 개선하기 위해 노력할 수 없으며, 초보자가 이해할 수없는 방식으로 작성된 경우 실제로 작업하는 것보다 이해하는 데 더 많은 시간을 소비하게됩니다.

거친 경험보다 더 나은 교사는 없습니다!

모든 코드베이스에는 끔찍한 비트가 숨겨져 있습니다. 시스템의 일부는 무언가를 두려워하기 때문에 만지기를 원하지 않거나 코드를 작성한 사람이 오랫동안 출발하여 이해를 취했기 때문에 의미있는 작업을 수행 할 수 없습니다 그들과 함께 코드의. 해당 코드가 주석 처리되지 않고 자체 문서화되지 않으면 문제가 더 악화됩니다.

나는 당신과 같은 코드베이스를 발견하고 번거로운 코더에게 책임을 부여 할 것을 제안합니다. 그에게 소유권을 부여하고, 책임을지고, 짧은 시간 내에 이해하기가 잘 문서화되지 않거나 불가능하기 때문에 유지할 수없는 코드 작업의 진정한 고통을 배울 수 있습니다. 몇 달간 작업을 마치고 나면 그가 돌아올 것이라고 확신합니다.


-1

주석없이 다른 사람에게 코드를주고 코드를 이해하도록 요청하십시오. 그는 적절한 의견의 중요성을 이해하고있을 수 있습니다.


12
나는 이것에 -1 버튼을 거의 피했다. 내가 작성한 코드의 대부분은 주석이 거의 없습니다. 나는 사람들이 적어도 지난 몇 년 동안 이해할 수 없다고 불평했다고 생각하지 않습니다. 소수의 예외를 제외하고, 코드가 경우에 필요 하는 의견을 이해 그때는 의견이 필요하지 않습니다, 그것은 선명도에 대한 개선이 필요합니다. (물론, 언어 구문에 대한 기본적인 이해를 가정해야합니다. C ++에서는 reinterpret_cast<>()사람들이 혼란 스러울 수 있으므로 사용을 피하기 위해 단순히 벗어나지 말고 C #에서는 ??필요한 것을 사용하십시오.
CVn

2
@ MichaelKjörling : 작성하는 코드 종류에 따라 크게 달라질 수 있습니다. 코드가 일반적으로 알려지지 않은 언어 또는 API의 특성에 의존하거나 발견하는 데 몇 시간이 걸리는 모호한 버그를 피하기 위해 반 직관적 인 방식으로 무언가를 수행 한 경우에 대해 설명하는 것이 훨씬 효과적입니다 주석이없는이 배경 정보에 대해 코드를 "명확하게"만들려고 시도하는 것보다 (아티클에 대한 링크 포함) 가능합니다.
LarsH

@ MichaelKjörling : 지난 한 달 동안 깊은 GIS API로 씨름하고 있었기 때문에 오늘 그 말에 특히 동기가 있습니다. API의 기능은 복잡하며 철저하게 문서화되지 않았습니다. 우리는 끊임없이 놀라움에 빠지고 있으며, 그 중 일부는 한 번에 며칠을 되돌려 놓았습니다. 우리의 코드를 효과적으로 사용하기 위해 다른 사람 (또는 6 개월 만에)이 너겟을 재발견해야한다고 기대하는 것은 그 사람의 시간을 낭비하는 것입니다. 그리고 이러한 비밀은 일반적으로 비 논평 "명확성을 위해 향상"하여 문서화 할 수 없습니다.
LarsH

@LarsH 아마 내가 언급 한 "매우 적은 예외"중 하나 일 것입니다. 나는 그것이 실제로 가치를 더하는 부분을 ​​언급하는 것에 반대하지 않는다 . 그러나 코드를 쉽게 읽거나 읽기 어렵게 만드는 주석의 양은 아닙니다. 즉, API를 사용하면 이러한 단점을 다른 곳에서 문서화하는 경향이 있습니다. 예를 들어, 위키 또는 이와 유사한 것. 각 사용 옆에 관련 페이지에 대한 링크를 추가 할 수도 있습니다. 그렇게하면 첫 번째 시도에서 예상 한대로 코드가 작동하지 않을 때마다 API의 특정 기능을 사용하는 다른 장소를 찾을 필요가 없습니다.
CVn

@ MichaelKjörling : 일반적으로 동의했습니다. 이러한 예외가 드문 지 여부는 프로그래밍중인 도메인과 사용해야하는 API에 따라 다릅니다. 링크 / 참조는 현재 상황뿐만 아니라 일반적으로 적용되는 메모에 적합합니다. 아무도 코드 자체에 논문을 원하지 않습니다.
LarsH

-1

이 프로그래머는 코드 유지 보수를 수행합니까? 그렇지 않다면, 그는 : 당신이 가지고있는 싫어하는 프로젝트가 있는지 점검하고 그에게 유지 보수를 할당하십시오.

일반적으로 잘못 문서화 된 프로젝트는 수정하기 쉬운 것을 수정하기 위해 진행중인 작업을 이해하려고 노력하는 데 몇 시간을 잃는 것입니다. 이런 종류의 경험으로 인해 그가 최신 정보를 원치 않는다면, 정확하고 유용한 문서는 아무 것도 아닙니다.


1
이 접근 방식은 프로그래머가 작업을 수행하는 올바른 방식으로 교육하는 대신 종료하는 것이 더 적합합니다.
Martin Brown

-1

지난 프로젝트 중 하나에서 수십 개의 주석 (알고리즘, 결과 또는 일부 기본 JavaDoc)이 누락되었으므로 4 일마다 각 문제에 대한 전자 메일 알림을 130 개의 문제로 만들기로 결정했습니다. 3 주 후 280 개의 문제가 있었으며, 의견을 쓰기로 결정했습니다.


-1

주석에는 하나의 목적이 있으며 하나의 목적 만 있습니다.

이 코드가 왜 이런 일을합니까?

설명이 왜 그런지 설명이되지 않으면 제거해야합니다. 코드를 어지럽히는 쓸모없는 의견은 쓸모없는 것보다 적으며 적극적으로 유해합니다.

IDE에서 내 의견을 가장 분명하게 만드는 습관이 있습니다. 녹색 배경에 흰색 텍스트로 강조 표시됩니다. 정말 당신의 관심을 끌기.

이것은 코드 가 무엇을하고 있는지를 설명 하고 주석이 그렇게하고 있는지설명 하기 때문입니다. 나는 이것을 충분히 강조 할 수 없다.

주석의 좋은 예 :

/* Must instantiate clsUser before trying to encrypt a password because the code to 
   encrypt passwords only uses strong encryption if that module is loaded. */

나쁜 예 :

/* instantiate clsUser */

주석을 코드의 "섹션"으로 사용하는 경우 : 맘모스 메서드를 작고 유용한 명명 된 함수로 잘라 내고 주석을 제거하십시오.

다음 줄에서하고있는 말을하는 경우 : 코드를 자명하게 작성하고 주석을 제거하십시오.

주석을 경고 메시지로 사용하는 경우 : 이유를 말하십시오.


-2

여기에 답을 보충하기 위해 "정확히 원한다면 스스로해야한다"고 덧붙일 수 있습니다.

"최고 코드 주석 자"가되는 것이 아니라 다른 개발자가 원하는 것을 시연하는 역할 모델이되는 것을 의미합니다. 그들은 말을 보여주는이 보다 더 효과적입니다 이야기 . 품질 주석의 이점을 보여 주거나 다른 개발자에게 멘토가 될 수있는 멘토링을한다면 코드 주석 채택에 더 많은 성공을 거둘 수 있습니다.

마찬가지로 집에는 내가 좋아하지 않는 가사일이 있습니다. 그러나 그 같은 집안일은 아내의 "애완 동물 친구"집안일이 되어 그녀가 행복하기 위해 해야 할 일입니다. 같은 상황도 마찬가지입니다. 이 다른 개발자가 당신과 다른 우선 순위를 가지고 있으며 모든 것에 대해 당신에게 동의하지는 않을 것이라고 생각합니다. 아내와 내가 찾은 해결책은 "애완 동물 친구"집안일을 위해서 우리 스스로 조금 더 많은 일을하는 것을 의미하더라도 우리 스스로해야한다는 것입니다.


1
더 깨끗한 코드를 표시하거나 코드를 더 읽기 쉽게 리팩토링하면 코드에 주석을 추가하는 것보다 더 큰 변화가 있음을 주장합니다.
Makoto

누구든지 내 아이디어에 대해 싫어하는 것을 설명 할 수 있습니까?
M. Dudley

-6

단순 : 직원이 설명을하지 않으면 shift+alt+j코드 입력과 동시에 각 방법에서 자동 설명 을 누르도록 지시 합니다. 이러한 문제를 피하려면 코드 개정을 수행하십시오.


11
"자동 코멘트"? 그래서 그건 모든 사람이 코멘트에서 오는 "1 전을 증가"어디? 어떤 IDE를 사용합니까 (사용중인 작업을 피할 수 있습니까)?
CVn

내가 읽을 수있는 무언가로이 편집하려고했으나 나는 단어가 있는지 확실하지 않다 먼저 그 앞이나 뒤에 쉼표가 있어야합니다. 문구는 첫번째 의견을 하거나 먼저 각 방법에서 말해 ?
TRiG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.