Download presentation
Presentation is loading. Please wait.
1
Android Coding Convention
Suan Lee Android Coding Convention by Suan Lee
2
코딩 규칙 (Coding conventions)
“특정 언어의 프로그래밍 스타일을 안내하는 가이드” 파일 구성, 줄맞춤, 주석, 선언, 문장, 공백, 이름 짓기, 관례 “소스 코드를 읽기 쉽다” “소프트웨어 유지보수가 쉬워진다” Android Coding Convention by Suan Lee
3
코딩 규칙의 의미 프로그래밍 오류 소프트웨어 유지보수 리팩토링 가독성 …
Android Coding Convention by Suan Lee
4
컴파일 오류 ‘{‘ 등이 빠져서 발생하는 오류 대부분이 구문(syntax) 오류 타이핑 오류나 문법에 맞지 않아 발생
컴파일 시 오류 내용을 확인할 수 있음 가장 고치기 쉬움 Android Coding Convention by Suan Lee
5
런타임 오류 프로그램 실행 중에 발생하는 오류 특정 상황에서 발생
‘ret=anyValue/someValue’ 에서 someValue가 0인 상황 개발자의 경험이 필요 직관적으로 다양한 예외사항 파악 필요 여러 가지 보호 도구 사용 Android Coding Convention by Suan Lee
6
논리 오류 코딩 작업의 결과와 다르게 동작하는 경우 오류를 찾고 수정하기 까다로움 알고리즘에 대한 잘못된 구현
단순한 코딩 실수로 발생 if(someValue = 1) funcDoSomething(); funcDotheOtherthing(); if(1=comeValue) { funcDoSomething(); funcDotheOtherthing(); } 규칙 1: 비교 연산을 사용할 경우 반드시 상수를 비교 연산자 앞에 위치 규칙 2: if 문은 반드시 ‘{‘, ‘}’를 사용 Android Coding Convention by Suan Lee
7
코딩 규칙과 실행 프로그램의 관계 코딩 규칙으로 바이너리에 영향 코드의 가독성 개선 → 개발자 간의 코드 공유 쉬운 유지보수 정기적인 리팩토링에 도움 문서 자동화 가능 Android Coding Convention by Suan Lee
8
Java 언어 규칙 Exceptions: 설명 없이는 절대 catch 하거나 무시하지 마라
void setServerPort(String value) { try { serverPort = integer.parseInt(value); } catch (NumberFormatException e) { } Android Coding Convention by Suan Lee
9
Java 언어 규칙 메소드를 호출한 쪽으로 exception을 올림 exception을 추상화한 후에 호출한 쪽으로 보냄
void setServerPort(String value) throws NumberFormatException { serverPort = integer.parseInt(value); } void setServerPort(String value) throws ConfigurationException{ try { serverPort = integer.parseInt(value); } catch (NumberFormatException e) { throw new ConfigurationException(“Port “ + value + “ is not valid.”); } Android Coding Convention by Suan Lee
10
Java 언어 규칙 exception 처리 후, ‘catch’ 블록에서 적당한 값
exception 된 것을 ‘RuntimeException’ 으로 보냄 void setServerPort(String value) { try { serverPort = Integer.parseInt(value); } catch (NumberFormatException e) { serverPort = 80; } void setServerPort(String value) { try { serverPort = integer.parseInt(value); } catch (NumberFormatException e) { throw new RuntimeException(“Port “ + value + “ is not valid.”, e); } Android Coding Convention by Suan Lee
11
Java 언어 규칙 Exceptions: 일반적인 오류(generic exception)를 catch 하지 마라 (스택의 최상단 라이브러리 코드는 제외) 각 try당 분리된 catch 블록으로 처리 여러 개의 try 블록으로 리팩토링 이 수준에서 예외처리가 필요 없을 경우, 다시 예외를 보냄 컴파일러는 실행 시간에 일어날 문제를 코드에서 잡을 뿐임 try { someComplicatedIOFunction(); someComplicatedParsingFunction(); someComplicatedSecurityFunction(); } catch (Exception e) { handleError(); } Android Coding Convention by Suan Lee
12
Java 언어 규칙 Finalizers: 일반적으로 사용 하지 마라 Import: 한정적인 import 사용
finalizer는 object가 가비지 컬렉션을 수행할 때, 특정 코드가 실행될 수 있도록 함 언제 finalizer가 호출될지 아니면 호출되기는 하는지 보장 못함 Import: 한정적인 import 사용 많은 양의 import 문을 줄임 어떤 class가 사용되는지 확실함 Java 표준 라이브러리, 단위 테스트 코드는 예외 import foo.*; import foo.Bar; Android Coding Convention by Suan Lee
13
Java 스타일 규칙 주석/문서화 모든 파일에는 ‘Copyright’ 문구가 처음
‘package’문과 ‘import’ 문 순서로 기술 각 블록은 공백으로 구별 javadoc 주석을 이용해 class와 interface의 역할 기술 Android Coding Convention by Suan Lee
14
Java 스타일 규칙 주석/문서화 예 Android Coding Convention by Suan Lee
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.foo; import android.os.Blah; import android.view.Yada; import java.sql.ResultSet; import java.sql.SQLException; /** * Does X and Y and provides an abstraction for Z. */ public class Foo { ... } Android Coding Convention by Suan Lee
15
Java 스타일 규칙 짧은 메소드 지역 변수 import 순서
메소드가 40줄을 넘는다면, 프로그램 구조에 영향을 주지 않는 전제 하에서 분리할 수 있는지 생각 지역 변수 변수의 범위는 최소한으로 유지 가독성을 높이고, 유지보수를 쉽게 하며, 오류 가능성 줄임 import 순서 안드로이드, 써드파티 라이브러리, java, javax 순서 알파벳 순으로 정렬, 대문자는 소문자 앞에 위치 중요 그룹 사이에는 공백 삽입 Android Coding Convention by Suan Lee
16
Java 스타일 규칙 들여쓰기 줄 길이 블록은 공백 4개, 라인 랩에는 공백 8개
공백은 여러 명이 탭을 사용할 때, 각자의 탭으로 설정된 공백 개수가 다른 혼란을 막기 위해 사용 줄 길이 줄당 글자는 100자 이내 import, 커맨드 라인 명령어, URL 등은 예외 Android Coding Convention by Suan Lee
17
Java 스타일 규칙 필드 이름 public, static 외에는 ‘m’으로 시작 static 필드는 ‘s’로 시작
다른 필드는 소문자로 시작 public static final 필드는 모두 대문자로 시작하고, 단어 사이는 ‘_’로 연결 public class MyClass { public static final int SOME_CONSTANT = 42; public int publicField; private static MyClass sSingleton; int mPackagePrivate; private int mPrivate; protected int mProtected; } Android Coding Convention by Suan Lee
18
Java 스타일 규칙 중괄호 조건문 중괄호 Android Coding Convention by Suan Lee
class MyClass { int func() { if (something) { // ... } else if (somethingElse) { // ... } else { // ... } } } if (condition) { body; // ok } if (condition) body; // ok Android Coding Convention by Suan Lee
19
Java 스타일 규칙 Annotation 안드로이드 표준은 Java 1.5에서 미리 정의한 annotation 사용
다른 modifier보다 먼저 위치, 같은 줄에 둠 여러 개의 annotation이 있거나 인수화된 경우, 알파벳 순서로 하나에 한 줄씩 위치 좋은 예 나쁜 예 XmlHttpRequest XMLHTTPRequest getCustomerId getCustomerID Android Coding Convention by Suan Lee
20
Java 스타일 규칙 ‘TODO’ 스타일 일관성 유지 임시 코드나 단기적인 해결책, 충분하지 않은 코드는 TODO 주석 사용
모든 코드에 일관성을 유지 다른 사람과 다른 코드 스타일은 개성이 아니라 단점 Android Coding Convention by Suan Lee
21
Java 스타일 규칙 로깅 안드로이드의 5단계 로그 레벨 ERROR: 치명적인 상황이 발생했을 경우
WARNING: 심각하고 예상치 못한 상황이 발생한 경우 INFOMATIVE: 대부분의 사람들이 관심 가질 만한 상황 DEBUG: 디바이스에서 예상치 못한 동작 조사와 디버깅 관련 VERBOSE: 위 4개의 상황 외에서 사용 Android Coding Convention by Suan Lee
22
Java 스타일 규칙 테스트 메소드 이름 명명법 ‘_’를 이용해 어떤 테스트 케이스와 어떤 것이 테스트 될 것인지 분리
void testIsDistinguishable_protanopia() { ColorMatcher colorMatcher = new ColorMatcher(PROTANOPIA) assertFalse(colorMatcher.isDistinguishable(Color.RED, Color.BLACK)) assertTrue(colorMatcher.isDistinguishable(Color.X, Color.Y)) } Android Coding Convention by Suan Lee
23
이클립스에서 안드로이드 포맷팅 적용 안드로이드 포맷팅
./development/ide/eclipse/android-formatting.xml Android Coding Convention by Suan Lee
Similar presentations