Android Coding Convention

Slides:



Advertisements
Similar presentations
국가도서관통계시스템 수치입력자 매뉴얼 이의신청 방법 Version. 1.0.
Advertisements

11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
EXEM ( ) LTW를 활용한 데이터 수집기 김경식.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
2장 닷넷 프레임워크.
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
객체지향 프로그래밍.
Chapter 02 JAVA 프로그래밍 시작하기 01 실무에서 사용하는 JAVA 개발 환경 02 JAVA 프로그램 작성
Java Seminar 6.
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
Internet Computing KUT Youn-Hee Han
12장. JSP에서 자바빈 활용 제12장.
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
제 12장 예외 처리 12.1 설계 쟁점 12.2 PL/I의 ON-조건 12.3 Ada의 예외 처리
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
5 익셉션 처리.
임베디드 프로그래밍 Lecture #
제7장 제어구조 I – 식과 문장.
음악 재생 프로그램 예외 처리 방법 try/catch 블록 예외 선언 방법
[ 단원 08 ] 예외처리와 스레드.
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
8장 자바 입출력.
2장. UML 기본 개념.
자바 5.0 프로그래밍.
Power Java 제15장 예외 처리 (Exception Handling).
제3장 이클립스 사용하기.
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
10장 예외 (Exceptions).
명품 Java Programming.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Java IT응용시스템공학과 김형진 교수 2장. 자바의 환경 public class SumTest {
Android 개발환경 설치 및 Hello World
윤 홍 란 4 장 클래스 작성 윤 홍 란
DataScience Lab. 박사과정 김희찬 (월)
This, static, final 지정 예약어 자바 4대 중첩 클래스
자바 5.0 프로그래밍.
제1장 서론.
글사랑 캡션 편집 안드로이드 앱 담당 교수님 전진우 교수님 진세훈 정상기 글사랑.
DataScience Lab. 박사과정 김희찬 (월)
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
[INA470] Java Programming Youn-Hee Han
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
자바 5.0 프로그래밍.
JA V A W. 07 Sb.L.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C# 10장. 참조형.
Java RMI (Remote Method Invocation)
Name Title Company Name
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Presentation transcript:

Android Coding Convention Suan Lee http://www.webdizen.net Android Coding Convention by Suan Lee

코딩 규칙 (Coding conventions) “특정 언어의 프로그래밍 스타일을 안내하는 가이드” 파일 구성, 줄맞춤, 주석, 선언, 문장, 공백, 이름 짓기, 관례 “소스 코드를 읽기 쉽다” “소프트웨어 유지보수가 쉬워진다” Android Coding Convention by Suan Lee

코딩 규칙의 의미 프로그래밍 오류 소프트웨어 유지보수 리팩토링 가독성 … Android Coding Convention by Suan Lee

컴파일 오류 ‘{‘ 등이 빠져서 발생하는 오류 대부분이 구문(syntax) 오류 타이핑 오류나 문법에 맞지 않아 발생 컴파일 시 오류 내용을 확인할 수 있음 가장 고치기 쉬움 Android Coding Convention by Suan Lee

런타임 오류 프로그램 실행 중에 발생하는 오류 특정 상황에서 발생 ‘ret=anyValue/someValue’ 에서 someValue가 0인 상황 개발자의 경험이 필요 직관적으로 다양한 예외사항 파악 필요 여러 가지 보호 도구 사용 Android Coding Convention by Suan Lee

논리 오류 코딩 작업의 결과와 다르게 동작하는 경우 오류를 찾고 수정하기 까다로움 알고리즘에 대한 잘못된 구현 단순한 코딩 실수로 발생 if(someValue = 1) funcDoSomething(); funcDotheOtherthing(); if(1=comeValue) { funcDoSomething(); funcDotheOtherthing(); } 규칙 1: 비교 연산을 사용할 경우 반드시 상수를 비교 연산자 앞에 위치 규칙 2: if 문은 반드시 ‘{‘, ‘}’를 사용 Android Coding Convention by Suan Lee

코딩 규칙과 실행 프로그램의 관계 코딩 규칙으로 바이너리에 영향 코드의 가독성 개선 → 개발자 간의 코드 공유 쉬운 유지보수 정기적인 리팩토링에 도움 문서 자동화 가능 Android Coding Convention by Suan Lee

Java 언어 규칙 Exceptions: 설명 없이는 절대 catch 하거나 무시하지 마라 void setServerPort(String value) { try { serverPort = integer.parseInt(value); } catch (NumberFormatException e) { } Android Coding Convention by Suan Lee

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

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

Java 언어 규칙 Exceptions: 일반적인 오류(generic exception)를 catch 하지 마라 (스택의 최상단 라이브러리 코드는 제외) 각 try당 분리된 catch 블록으로 처리 여러 개의 try 블록으로 리팩토링 이 수준에서 예외처리가 필요 없을 경우, 다시 예외를 보냄 컴파일러는 실행 시간에 일어날 문제를 코드에서 잡을 뿐임 try { someComplicatedIOFunction(); someComplicatedParsingFunction(); someComplicatedSecurityFunction(); } catch (Exception e) { handleError(); } Android Coding Convention by Suan Lee

Java 언어 규칙 Finalizers: 일반적으로 사용 하지 마라 Import: 한정적인 import 사용 finalizer는 object가 가비지 컬렉션을 수행할 때, 특정 코드가 실행될 수 있도록 함 언제 finalizer가 호출될지 아니면 호출되기는 하는지 보장 못함 Import: 한정적인 import 사용 많은 양의 import 문을 줄임 어떤 class가 사용되는지 확실함 Java 표준 라이브러리, 단위 테스트 코드는 예외 import foo.*; import foo.Bar; Android Coding Convention by Suan Lee

Java 스타일 규칙 주석/문서화 모든 파일에는 ‘Copyright’ 문구가 처음 ‘package’문과 ‘import’ 문 순서로 기술 각 블록은 공백으로 구별 javadoc 주석을 이용해 class와 interface의 역할 기술 Android Coding Convention by Suan Lee

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 * * http://www.apache.org/licenses/LICENSE-2.0 * * 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

Java 스타일 규칙 짧은 메소드 지역 변수 import 순서 메소드가 40줄을 넘는다면, 프로그램 구조에 영향을 주지 않는 전제 하에서 분리할 수 있는지 생각 지역 변수 변수의 범위는 최소한으로 유지 가독성을 높이고, 유지보수를 쉽게 하며, 오류 가능성 줄임 import 순서 안드로이드, 써드파티 라이브러리, java, javax 순서 알파벳 순으로 정렬, 대문자는 소문자 앞에 위치 중요 그룹 사이에는 공백 삽입 Android Coding Convention by Suan Lee

Java 스타일 규칙 들여쓰기 줄 길이 블록은 공백 4개, 라인 랩에는 공백 8개 공백은 여러 명이 탭을 사용할 때, 각자의 탭으로 설정된 공백 개수가 다른 혼란을 막기 위해 사용 줄 길이 줄당 글자는 100자 이내 import, 커맨드 라인 명령어, URL 등은 예외 Android Coding Convention by Suan Lee

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

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

Java 스타일 규칙 Annotation 안드로이드 표준은 Java 1.5에서 미리 정의한 annotation 사용 다른 modifier보다 먼저 위치, 같은 줄에 둠 여러 개의 annotation이 있거나 인수화된 경우, 알파벳 순서로 하나에 한 줄씩 위치 좋은 예 나쁜 예 XmlHttpRequest XMLHTTPRequest getCustomerId getCustomerID Android Coding Convention by Suan Lee

Java 스타일 규칙 ‘TODO’ 스타일 일관성 유지 임시 코드나 단기적인 해결책, 충분하지 않은 코드는 TODO 주석 사용 모든 코드에 일관성을 유지 다른 사람과 다른 코드 스타일은 개성이 아니라 단점 Android Coding Convention by Suan Lee

Java 스타일 규칙 로깅 안드로이드의 5단계 로그 레벨 ERROR: 치명적인 상황이 발생했을 경우 WARNING: 심각하고 예상치 못한 상황이 발생한 경우 INFOMATIVE: 대부분의 사람들이 관심 가질 만한 상황 DEBUG: 디바이스에서 예상치 못한 동작 조사와 디버깅 관련 VERBOSE: 위 4개의 상황 외에서 사용 Android Coding Convention by Suan Lee

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

이클립스에서 안드로이드 포맷팅 적용 안드로이드 포맷팅 ./development/ide/eclipse/android-formatting.xml Android Coding Convention by Suan Lee