-
Notifications
You must be signed in to change notification settings - Fork 0
1. Coding Style
๊ธฐ๋ณธ์ ์ผ๋ก Android Opensource Project์์ ๊ถ์ฅํ๋ Java Language Rules๋ฅผ ๋ฐ๋ฆ
๋๋ค.
๋ณธ ๋ฌธ์๋ ์๋ ๋ ํผ๋ฐ์ค ๋ฌธ์๋ฅผ ํ์ํ๋งํผ ๋ฒ์ญํ ๋ด์ฉ ์
๋๋ค.
reference : https://source.android.com/source/code-style.html
๋ณธ ๋ฌธ์๋ฅผ ๋ชจ๋ ์ฐธ๊ณ ํ์์ผ๋ฉด ์๋์ ๋ Android coding Guideline๊ด๋ จ ๋ฌธ์๋ฅผ ์ฝ์ด์ฃผ์ธ์.
(๊ถ์ ๊ฐ ์๋ ํ์์
๋๋ค!)
Android Best Practices(ํ๊ธ)
android-guidelines(์๋ฌธ)
๋ณ์๋ช ๊ณผ ๋ฉ์๋๋ ๋ค์๊ณผ๊ฐ์ ํจํด์ผ๋ก ๋,์๋ฌธ์๋ฅผ ํ์ฉํ์ฌ ์์ฑํฉ๋๋ค. ํ ์คํธ์ฝ๋ ๋ฉ์๋๊ฐ ์๋์ด์ ์ธ๋๋ฐ( _ )๋ ํ์ฉํ์ง ์์ต๋๋ค.
| Good | Bad |
|---|---|
| XmlHttpRequest | XMLHTTPRequest |
| getCustomerId | getCustomerID |
| class Html | class HTML |
| String url | String URL |
| long id | long ID |
- public์ด ์๋๋ฉฐ, static์ด ์๋ ํ๋๋ณ์์ ์ด๋ฆ์ m์ผ๋ก ์์ํฉ๋๋ค.
- Static ํ๋๋ณ์์ ์ด๋ฆ์ s๋ก ์์ํฉ๋๋ค.
- ๊ทธ ์ธ์ ๋ค๋ฅธ ํ๋๋ณ์์ ์ด๋ฆ์ ์๋ฌธ์๋ก ์์ํฉ๋๋ค.
- ๋จ public static final๋ก ์์ํ๋ ์์ ํ๋๋ณ์์ ์ด๋ฆ์ ๋๋ฌธ์์ ์ธ๋๋ฐ( _ )๋ง ์ฌ์ฉํฉ๋๋ค.
- ๋ณ์๋ช ์ ์ธ์ ๋ ๊ฐ ์์ค์ฝ๋์ ์ต์๋จ์ ์์ฑํฉ๋๋ค.
ex ๋ณ์๋ช ์ ์์
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;
}ํ
์คํธ์ฝ๋์์ ์ค์ํ ๋ถ๋ถ์ ์ด๋ฃจ๋ ๋ฉ์๋๋ test๋ก ๋ฉ์๋์ ์ด๋ฆ์ ์์ํ๋ฉฐ, ๊ทธ ์ดํ์๋ ํ
์คํธํ ๋ฉ์๋์ ์ด๋ฆ์ ์ ์ต๋๋ค. ๋ฉ์๋์ ์ด๋ฆ๋ค์๋ ์ธ๋๋ฐ( _ )๋ฅผ ์์ฑํ์ฌ ์ธ๋๋ฐ ๋ค์๋ ํด๋น ํ
์คํธ ๋ฉ์๋๊ฐ ์ด๋ค ์ํฉ์ ๋ํ์ฌ ํ
์คํธ๋ฅผ ์งํํ๋์ง์๋ํ ์์ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด userLogin์ด๋ผ๋ ๋ฉ์๋์์ ์ ์ ๊ฐ ์๋๋ก๊ทธ์ธ์ ์คํํ๋ ๊ฒฝ์ฐ์ ๋ํด์ ํ
์คํธํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค๋ฉด ๊ทธ ๋ฉ์๋๋ช
์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ ์
๋๋ค. testUserLogin_autologin
ํ์ฅ์ฑ์๋ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๊ธฐ์ํด์ ๋ฉ์๋์ฝ๋๋ ๋๋๋ก ์งง๊ณ ํจ์ถ์ ์ด๊ฒ ์์ฑํด์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ๋์ ๊ธด ๋ฉ์๋ ์ฝ๋๊ฐ ๋ฉ์๋์ ์ญํ ์ ๋ํด ์๊ธฐ์ฌ์ด ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์์ต๋๋ค.
๊ทธ๋์ ๋ฉ์๋ ๊ธธ์ด์๋ํ ๋ช
ํํ ์ ํ์ ์์ต๋๋ค. ํ์ง๋ง ๋ง์ฝ ๋ฉ์๋ ํ๊ฐ์ ๊ธธ์ด๊ฐ 40์ค์ ๋์ด๊ฐ๋ค๋ฉด ๊ทธ๊ฒ์ ํ์ฌ ์ง๊ณ ์๋ ์ฝ๋๊ฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ํด๋ฅผ ๋ผ์น๊ณ ์๋ ๊ฒ์ด ์๋์ง ๋์๋ด์ผํ ํ์์ฑ์ด ์์ต๋๋ค.
์ฝ๋์ ๊ฐ์ฅ ์๋จ์๋ ํด๋น ์ฝ๋์๋ํ ์ ์๊ถ์ ๋ช
์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ผ๋ก Import์ ๋ํ ์ฝ๋๊ฐ ์ด์ด์ง๋ฉฐ, Import ์๋๋ก ์กด์ฌํ๋ ์ฝ๋๋ค๋ถํฐ๋ ์ฃผ์์ ๋ฌ์์ผํ๋ ์ฝ๋์ ์๋จ ๋น์นธ์ ๊ด๋ จํ ์ค๋ช
์ฃผ์์ ์ ์ต๋๋ค. ์๋ฅผ๋ค์ด ํด๋์ค๋ ์ธํฐํ์ด์ค์ ๋ํ ๊ฐ๋จํ ์๋ด๋ฅผ ๋ด์ ์ฃผ์์ฝ๋๋ class MyClass extends A์ ์์ ์ ์ผ๋ฉฐ, ๊ฐ ๋ฉ์๋์๋ํ ์ค๋ช
์ ๋ด์ ์ฃผ์์ public void userLogin()์ ์๋จ์ ํด๋น ๋ฉ์๋์ ์ญํ ๊ณผ ๋ฉ์๋์ ๋ค์ด๊ฐ๋ ์ธ์์ ๋ํ ์ค๋ช
์ ์ ์ผ๋ฉด ๋ฉ๋๋ค.
์๋ง ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ํด๋น ์ฝ๋์์ญ์์ ์ฐจํ์ ํด์ผํ ์ผ์๋ํ Todo๋ฅผ ์์ฑํ๋ ค ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์
๋๋ค.
๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ //Todo : We must write login logiccode! ์ ๊ฐ์ด ์ฃผ์์ Todo๋ผ๋ ํค์๋๋ฅผ ์์ฑํ๋๊ฒ์ ์์์ผ๋ก ์ฃผ์์ ์์ฑํ๋ฉด ๋ฉ๋๋ค. Todo๋ก ์์ํ๋ ์ฃผ์๋ฌธ์๋ํด์๋ ํ๊ด์์ผ๋ก Highlight ๋ ๊ฒ์
๋๋ค.
์์ Todo์ ๊ฒฝ์ฐ์ ๋๊ฐ์ด Fixme๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ฐจํ์ ๋ฆฌํฉํ ๋ง์ ์งํํด์ผํ๋ ๋ถ๋ถ์ด๊ฑฐ๋, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์์ง๊ฐ ์๋ ์ฝ๋์ ๊ฒฝ์ฐ์ ์์ ์ ํด์ผํ๋ ๋ถ๋ถ์๋ํด์ ์๋ด๋ฅผ ํ๊ธฐ์ํ ์ฃผ์ ํค์๋ ์
๋๋ค. ์ฌ์ฉ๋ฒ์ Todo์ ๊ฐ์ต๋๋ค.
๋ค์ฌ์ฐ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก 4์นธ์ ์ฌ์ฉํฉ๋๋ค. ์์ํ Tab ๋ค์ฌ์ฐ๊ธฐ๋ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, Android Studio์์ ์ ๊ณตํ๋ Tab์ ๋๋ฅด๋ฉด space4์นธ์ ํ ๋นํ๋ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ฐํธํ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ํํ์ธ์. (๊ธฐ๋ณธ์ผ๋ก ๋์ด์์ต๋๋ค)
๋จ, ๋ค์ฌ์ฐ๊ธฐ๋ฅผ 8์นธ ํ ๋นํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ๋ ์ด์ด์ ธ์ผํ๋ ์ฝ๋๋ฅผ ์ด์ฉ์์์ด ๊ธธ์ด๋ฅผ ์กฐ์ ํ๊ธฐ์ํด ํ ์ค์ ๋ด๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋๋ฐ, ์ด ๊ฒฝ์ฐ์ ํ ์ค์ ๋ด๋ฆฐ ์ฝ๋๋ 8์นธ์ง๋ฆฌ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ํํฉ๋๋ค. ๋ค์์ ๊ทธ ์ข์ ์์
๋๋ค.
Instrument i =
someLongExpression(that, wouldNotFit, on, one, line);์๋์๊ฐ์ ํํ๊ฐ ํ์ค Brace Style์ ๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ฌธ์ ํํ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค.
class MyClass {
int func() {
if (something) {
// ...
} else if (somethingElse) {
// ...
} else {
// ...
}
}
}๋จ if ์กฐ๊ฑด๋ฌธ์ ํ๋จ์ ๋จ ํ์ค๋ง์ ์ฝ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ํํ๋ก ์ปจ๋ฒค์
์ด ์กด์ฌํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ ์ Ex1)
if (condition) {
body();
}์ฌ๋ฐ๋ฅธ ์ Ex2)
if (condition) body();์๋ชป๋ ์
if (condition)
body(); // bad!Import๋ฅผ ์์ฑํ๋ ์ฝ๋์๋ ์์๊ฐ ์์ต๋๋ค! ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ๊ฐ์ ์์๋ฅผ ๋ฐ๋ผ์ฃผ์ธ์
- Android๊ด๋ จ ํจํค์ง Import (Acitivty, Fragment, View ๋ฑ)
- 3th party ๋ผ์ด๋ธ๋ฌ๋ฆฌ (volley, junit, NAVER maps ๋ฑ)
- java and javax (ArrayList, Math ๋ฑ)
๊ทธ๋ฆฌ๊ณ IDE์์ ์ฝ๋ ์๋ ์ ๋ ฌ์ ์งํํ๋ฉด ๋ค์๊ณผ๊ฐ์ ํํ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
- ์ํ๋ฒณ ์์๋๋ก ์ ๋ ฌ์ด ๋ฉ๋๋ค.
- Major(android, com, org, java, etc...)๋ผ๋ฆฌ ๊ทธ๋ฃนํ์ด ๋๊ฒ๋ค๋ผ๋ฆฌ ํ ์ค๊ฐ๊ฒฉ์ผ๋ก ๋ถ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
์์๊ฐ์ Import ์์ฑ์์์ ๊ธฐ์ค์ด ์ฑ๋ฆฝ๋ ์์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ๋ฐ์๋ค์ import๋ฅผ ๋ณผ๋ android์ ๊ด๋ จํ import๋ฅผ ๋ณด๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์๋จ์ ๋ณด๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
- ์ฌ๋๋ค์ import๋ฅผ ๋ณผ๋ java์ ๊ด๋ จํ import๋ฅผ ๋ณด๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ํ๋จ์ ๋ณด๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
- ์ด๋ฏธ ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฌํ ์คํ์ผ์ ์ต์ํด์ ธ์์ต๋๋ค.
- ๋ง์ IDE๋ค์ด ์ด๋ฌํ ์คํ์ผ์ ๋ฐ๋ผ์์ต๋๋ค.
Bar๋ผ๋ ํด๋์ค๋ฅผ Importํ๊ธฐ์ํด ์ฐ๋ฆฌ๋ ๋ค์ ๋๊ฐ์ง ํํ์ ๊ฐ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
import foo.*; / import foo.Bar;
์ฒซ๋ฒ์งธ์๊ฐ์ ๊ฒฝ์ฐ๋ ์ข์ import๊ฐ ์๋๋๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ Import๋ฅผ ๋ณด์์ ๋ ์ด๋ค ๋ชฉ์ ์ ๊ฐ๊ณ ์ด๋ค ํด๋์ค๋ฅผ Import ํ๋ คํ๋์ง ๊ทธ ์๋๋ฅผ ์์์ฑ๊ธฐ๊ฐ ์ด๋ ค์ฐ๋ฉฐ, ์ธ๋ฐ์๋ ํด๋์ค๋ฅผ Import ํ๋ ๊ฒ์ ๋ญ๋น์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ ๋ง ํด๋น ํจํค์ง์ ๋ชจ๋ ํด๋์ค๊ฐ ํ์ํ๊ฒฝ์ฐ (junit.framework.*)๊ฐ ์๋๋ผ๋ฉด ์ฌ์ฉํด์ผํ ํด๋์ค๋ง ์ ํํ ๋ช
์ํด์ Import ํ๋๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ฝ๋ ํ์ค์ 100์์ด์์ ์ฝ๋๋ ์ ์ง ์๋๊ฒ์ ๊ถ์ฅํฉ๋๋ค. Android Studio ๊ธฐ์ค Seperated Method ๊ธฐ๋ฅ์ ์ผ๋ฉด 100์ ๊ธฐ์ค์ผ๋ก ์๋ํฐ์์ญ์ ์ค์ ์ด ๊ทธ์ด์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ํน์ IDE ํ๋จ ์ฐ์ธก์ ํ์ฌ ์ปค์๊ฐ ๋ช ์นธ์งธ์ธ์ง๋ฅผ ์๋ดํ๋ ๋ถ๋ถ์ ๋ณด๊ณ ์ ์ ํ ๊ฐํ์ ์งํํ์ฌ ์ฝ๋๋ฅผ ์ง๋ฉด ๋ฉ๋๋ค.
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์๋ฅผ ๊ผญ ํ๋ฒ์ ๋๋ ์ฝ๊ณ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์์ ์ผ๋ก ๊ฐ๋ฐ์ด ๋๋์ง, Issue๋ฅผ ๋ณด๋ฉด์ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ์ฌ์ฉํ๋ฉด์ ๋ฌธ์ ์ ์์ง๊ฐ ์๋์ง ์ดํด๋ด ์๋ค. ํนํ Deprecated๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๊ฒ์ผ๋ก ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ํํ ์๋๋ก์ด๋๊ฐ๋ฐ์ ํ๋ฉด์ ํฌ๊ฒ ์์ํ์ง์๊ณ Log๋ฅผ ์ฉ๋์ ๋ง์ง์๊ฒ ํ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Android์ Log์๋ ERROR / WARNING / INFORMATIVE / DEBUG / VERBOSE ์ข ๋ฅ๊ฐ ์์ผ๋ฉฐ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ ๋ ๊ทธ ๋ก๊ทธ๊ฐ ์ด๋ค ์นดํ ๊ณ ๋ฆฌ์ ์ํ๋์ง์ ๋ํด์ ์๊ฐ์ํ๋ฉด์ ์ ์ ํ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ๋ณธ Deviewschedํ๋ก์ ํธ์์๋ Android์ ๋ก๊ทธ๋ฅผ ์ง์ ํธ์ถํ๋ ๊ฒ์ด ์๋, Util ํจํค์ง์์๋ LogUile ํด๋์ค๋ฅผ ํ์ฉํ์ฌ LOGD / LOGI / LOGW / LOGV / LOGE ์ ๊ฐ์ด ํ์ฉํ๋ ์ ํธ ํด๋์ค๊ฐ ์กด์ฌํฉ๋๋ค.
๊ผญ ๋ณธ๋ฌธ์ ๋ด์ฉ ๋ฟ๋ง์๋๋ผ ์ด ๋ฌธ์ ์๋จ์์ ์๊ฐํ ๋๋จธ์ง ๋๊ฐ์ ํ์ด์ง์๋ํด์๋ ์ฝ์ด๋ณด์ธ์. ํด๋น ๋ฌธ์๋ค์ ๋ด๊ฒจ์๋ ์ปจ๋ฒค์ ์๋ด ์ญ์ ๋ณธ ํ๋ก์ ํธ์ ์ฝ๋ฉ ์คํ์ผ ์ปจ๋ฒค์ ์ผ๋ก ์ ์ฉํด๋๊ฐ ์์ ์ ๋๋ค!