Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

36

Partager

Télécharger pour lire hors ligne

간단하게 알아보는 좋은 코드 서영훈

Télécharger pour lire hors ligne

간단히 알아보는 좋은 코드

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir

간단하게 알아보는 좋은 코드 서영훈

  1. 1. 좋은 코드 DevRookie – ( 서영훈 )NullCounter 20141227 간단하게 알아보는 읽기
  2. 2. 어떻게 읽기 좋은 코드이어야 하는가 ? • 가독성이 있는 코드 – 다른 사람이 보고 이해 하는 시간을 최소화 할 수 있는 코드가 좋은 코드이다 . return exponent >= 0 ? mantissa * ( 1 << expenent ) : mantissa / ( 1 << -exponent ); if ( exponent >= 0 ) return mantissa * ( 1 << exponent ); else return mantissa / ( 1 << -exponent );
  3. 3. 코드 분량이 적으면 무조건 좋은 코드 ? • 코드 양을 적게 해서 문제를 해결할 수 있으면 좋 은 코드 • 하지만 항상 그렇지는 않다 . assert( ( ! ( bucket = FindBucket( key ) ) ) || !bucket->IsOccupied() ); bucket = FindBucket( key ); if( bucket != NULL ) assert( !bucket->IsOccupied() );
  4. 4. 코드 분량이 적으면 무조건 좋은 코드 ? • 코딩하는데 있어서 이해를 위한 시간은 다른 것들에 비해 가치가 있는 일인가 ?
  5. 5. 이름에 적절한 정보 담기 • 특정한 단어 고르기 class Thread { void Stop(); … }; – Thread 클래스에서는 Kill(), Pause() 로 대체가능 – BinaryTree 클래스는 Height(), NumNodes(), MemoryByte() 가 더 쓸모있는 이름이다 . class BinaryTree { int Size(); … };
  6. 6. 이름에 적절한 정보 담기 • tmp 같은 보편적인 이름 피하기 – 유지기간이 짧은 변수여도 변수의 목적이나 담고 있는 값이라고 변수명에 설명해줘야 한다 . If ( right < left ) { tmp = right; right = left; left = tmp; } String tmp = user.name(); tmp += “ “ + user.phone_number(); tmp += “ “ + user.email(); … Template.set( “user_info”, tmp ); String user_info = user.name(); user_info += “ “ + user.phone_number(); user_info += “ “ + user.email(); … Template.set( “user_info”, user_info );
  7. 7. 이름에 적절한 정보 담기 • 추상적인 이름보다 구체적인 이름을 선호하라 void ServerCanStart(); void CanListenOnPort(); – 서버가 어느 TCP/IP 포트를 사용할 수 있는지 검사하 는 함수
  8. 8. 이름에 적절한 정보 담기 • 추가적인 정보를 이름에 추가하자 – 단위 : void Start(int delay); void Start(int delay_secs); – 속성 : data data_urlenc
  9. 9. 주석에 담아야 하는 대상 • 설명하지 말아야 할 것 – 빠르게 유추할 수 있는 것 // 이진 트리를 위한 클래스 정의 class BinaryTree { int Height(); // 트리의 높이 … };
  10. 10. 주석에 담아야 하는 대상 • 설명하지 말아야 할 것 – 나쁜 이름에 주석을 달지 말고 좋은 이름으로 바꾸자 // 해당 키를 위한 위한 핸들을 높아 준다 . // 이 함수는 실제 레지스트리를 수정하지 않음 void DeleteRegistry( RegistryKey* key ); void ReleaseRegistryHandle( RegistryKey* key );
  11. 11. 주석에 담아야 하는 대상 • 생각을 기록하자 – 영화의 관람객의 이해를 돕는 감독판처럼 주석을 넣자 – 코드의 결함 – 상수 값에 대한 설명 // 어차피 그렇게 많이 읽는 사람은 없으니 적절한 값을 넣자 . const int MAX_RSS_SUBSCRIPTIONS = 1000;
  12. 12. 읽기 쉬운 코드의 흐름 만들기 • 조건문에서 인수 순서 if ( length >= 10 ) if (10 <= length ) – 대부분 왼쪽 코드가 읽기 쉽다고 함 – 일반적인 규칙 • 왼쪽 : 값이 유동적이고 질문을 받는 쪽 • 오른쪽 : 고정적인 값으로 비교 대상
  13. 13. 읽기 쉬운 코드의 흐름 만들기 – If / else 의 경우 • 부정이 아닌 긍정을 먼저 다루자 [EX : if ( !debug ) 보다 if ( debug ) if ( !MyLog.Find( “Bad Request” ) { … } else { … }
  14. 14. 읽기 쉬운 코드의 흐름 만들기 • 삼항연산자 ( ? : ) 조건문 표현 – 여러 줄로 표현할 코드를 한 줄로 표현 가능 – 반면에 가독성이 떨어질 상황도 생길 수 있음 if ( A >= 0 ) { return B * ( 1 << A ); } else { return B / ( 1 << -A ); } return A >= 0 ? B * ( 1 << A ) : B / ( 1 << -A ); – 매우 간단한 연산일때만 사용하는 것이 가독성에 좋음
  15. 15. 읽기 쉬운 코드의 흐름 만들기 • goto 문 – 스파게티 코드를 양산하게 만드는 원흉 – 쓰지 않는 것이 좋음 if ( p == NULL ) goto exit; … … Exit: fclose( file ); return;
  16. 16. 읽기 쉬운 코드의 흐름 만들기 • 상위 수준에서의 흐름 프로그래밍 구조 프로그램 흐름을 잡기 어려운 상황 함수 포인터 실행할 함수가 런타임에 결정되어 컴파일 과정에선 어떤 코드가 실행될지 모른다 . 가상 함수 알려지지 않은 하위클래스의 코드를 호출 할 지도 모른다 . – 아래 구조들은 프로그래밍하는데 있어 매우 유용할 수 있다 . – 다만 나중에 접하는 사람을 위해 사용 빈도가 너무 과하지 않아야 한다 .
  17. 17. 거대한 표현을 쪼개기 • 설명 변수 String username = line.split( “:” ); if ( username == “root” ) if ( line.split( “:” ) == “root” ) – 중간에 설명을 위한 추가 변수를 만듦
  18. 18. 거대한 표현을 쪼개기 • 드모르간의 법칙 이용하기 not ( A or B or C ) ( not A ) and ( not B ) and ( not C ) not ( A and B and C ) ( not A ) or ( not B ) or ( not C ) if ( ! ( file_exists && !is_protected ) ) Error( “ 파일을 읽을 수 없습니다 .” ); if ( ! file_exists || is_protected ) Error( “ 파일을 읽을 수 없습니다 .” );
  19. 19. 변수의 가독성 • 변수를 잘못 사용할 때 코드를 이해하기 어려운 상황 – 변수의 수가 많을수록 기억하고 다루기 더 어려워진다 . – 변수의 범위가 넓어질수록 기억하고 다루는 시간이 더 길어진 다 . – 변수 값이 자주 바뀔수록 현재 값을 기억하고 다루기 어려워진 다 .
  20. 20. 참고 자료 • 1 장 코드는 이해하기 쉬워야 한다 . • 2 장 이름에 정보 담기 • 5 장 주석에 담아야 하는 대상 • 7 장 읽기 쉽게 흐름제어 만들기 • 9 장 변수와 가독성
  • RimHow

    Dec. 22, 2016
  • JisungJeon

    Dec. 16, 2016
  • KwanungPark

    Oct. 6, 2016
  • KimGunnwoo

    Oct. 4, 2016
  • lastkuku

    Oct. 4, 2016
  • ibluerose

    Oct. 4, 2016
  • PazzLee

    Oct. 3, 2016
  • DeepSeaDK

    Oct. 3, 2016
  • forwhom

    Oct. 3, 2016
  • koreaypg

    Oct. 3, 2016
  • ssuserb6af06

    Oct. 3, 2016
  • YongJePark

    Oct. 3, 2016
  • jukwankim

    Oct. 3, 2016
  • wall72

    Oct. 3, 2016
  • SoonGilChoi

    Oct. 2, 2016
  • 100001726064547

    Oct. 2, 2016
  • SamOhLee

    Oct. 2, 2016
  • applemintfield

    Oct. 2, 2016
  • JinchulJung1

    Oct. 2, 2016
  • KyungminLee42

    Oct. 2, 2016

간단히 알아보는 좋은 코드

Vues

Nombre de vues

4 724

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

4

Actions

Téléchargements

34

Partages

0

Commentaires

0

Mentions J'aime

36

×