- 2.1 ๊ณตํต ๊ท์น(common rules)
- 2.2 ํ์ผ(File)
- 2.3 ํจํค์ง(Package)
- 2.4 ํด๋์ค(Class)
- 2.5 ์์(Constant)
- 2.6 ๋ฉ์๋(Method)
- 2.7 ๋ณ์(Variable)
- 3.1 ์์ค์ฝ๋ ๊ตฌ์กฐ(Source code Structure)
- 3.2 ์ค๊ดํธ(Braces)
- 3.3 ์ค(Line)
- 3.4 ๊ณต๋ฐฑ ๋ฌธ์(Blank)
- 3.5 ์ด๋ ธํ ์ด์ (Annotation)
- 3.6 ์ ์ด์ ์์(Modifier Ordinary)
- 3.7 ๋ฆฌํฐ๋ด(Literal)
- 4.1 @Override๋ ๋ฌด์กฐ๊ฑด ์ฌ์ฉ(@Override : always used)
- 4.2 ๋ชจ๋ ์์ธ๋ ์ฒ๋ฆฌ(Caught exceptions : not ignored)
- 4.3 Static ๋ฉค๋ฒ๋ ํด๋์ค๋ก ์ ๊ทผ(Static members : Qualified using class)
๋ณธ ๋ฌธ์๋ Nangman์ Java code ์คํ์ผ์ ์ค๋ช ํฉ๋๋ค. ๋ณธ ๋ฌธ์์ ๊ฐ์ด๋๋ฅผ ์ดํดํ์ ํ ์ฌ์ฉํ์๋ ๊ธฐ์ ๋ฌธ์(Spring, Android)๋ก ์ด๋ํ์ฌ ๊ธฐ์ ์ ํด๋นํ๋ ๊ฐ์ด๋๋ฅผ ์์งํ์ธ์!
- ํด๋์ค(Class) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ํด๋์ค
- ์ด๊ฑฐํ ํด๋์ค - Enum Class
- ์ธํฐํ์ด์ค - Interface
- ์ด๋ ธํ ์ด์ ํ์ - Annotation type( @interface )
- ํด๋์ค ๋ฉค๋ฒ( Class Member ) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ค์ฒฉ๋ ํด๋์ค - Nested Class
- ํ๋ - Field
- ๋ฉ์๋ - Method
- ์์ฑ์ - Constructor
- ์ฃผ์(Comments) ์ฉ์ด๋ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ฃผ์ - Comment(s) : ์์ค์ฝ๋ ๋ด ๊ตฌํ ์ฃผ์
- ๋ชจ๋ ์๋ณ์๋ ASCII์ ์ซ์๋ง ํ์ฉํฉ๋๋ค.
- ์๋ณ์์ ์ ๋ฏธ์ฌ์ ์ ๋์ฌ๋ ํ์ฉํ์ง ์์ต๋๋ค.
(์์)
(X) name_
(X) mName
(X) s_name
(X) kName
- ์ต์์ ํด๋์ค ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ฌ ์์ฑ(๋ค๋ฅธ ํ์ผ๊ณผ ์ค๋ณต๋ ์ด๋ฆ์ ๊ฐ์ง ํด๋์ค ํ์ผ์ ํ์ฉํ์ง ์์ต๋๋ค.)
- .javaํ์ผ ๋ง ํ์ฉํฉ๋๋ค.
- ์์คํ์ผ์ UTF-8 ์ธ์ฝ๋ฉ์ ์ง์ํฉ๋๋ค.
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋๋ค๊ณ ํ๋จ๋๋ฉด ์ ๋์ฝ๋ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ฌธ์์ ์ซ์๋ง ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
(์์)
(O) com.example.deepspace
(X) com.example.deepSpace
(X) com.example.deep_space
- ํด๋์ค ์ด๋ฆ์ UpperCamelCase ๋ก ์์ฑ๋ฉ๋๋ค.
- ํด๋์ค ์ด๋ฆ์ ์ผ๋ฐ์ ์ผ๋ก๋ ๋ช ์ฌ, ๋ช ์ฌ๊ตฌ๋ก ์์ฑํฉ๋๋ค.
(ํด๋์ค ์์)
(O) CompanyList
(X) Companylist
- ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ ์ผ๋ถ ํ์ฉ์ฌ, ํ์ฉ์ฌ ๊ตฌ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
(์ธํฐํ์ด์ค ์์)
(O) CompanyReliableRate
(O) CompanyTrustRate
(X) CompanyLiability
- ํ ์คํธ ํด๋์ค์ ๊ฒฝ์ฐ ํด๋น ํด๋์ค ์ด๋ฆ ๋ค์ Test๋ฅผ ํฌํจํฉ๋๋ค
(์์)
(O) CompanyListTest
- ๋๋ฌธ์์ ์ธ๋๋ฐ๊ฐ ํ์ฉ๋๋ UPPER_SNAKE_CASE๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ช ์ฌ, ๋ช ์ฌ๊ตฌ๋ก ์์ฑํด์ผํฉ๋๋ค.
(์์)
(O) MAX_MONEY
- lowerCamelCase๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋์ฌ ๋๋ ๋์ฌ๊ตฌ ์ ๋๋ค.
(์์)
(O) sendMessage
(O) stop
(X) companyList
(O) editCompanyList
๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ์ ํ ๋ณ์๋ฅผ ํฌํจํฉ๋๋ค.
- lowerCamelCase๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ช ์ฌ ๋๋ ๋ช ์ฌ๊ตฌ ์ ๋๋ค.
- ๊ณต์ฉ ๋ฉ์๋์์ ํ ๋ฌธ์ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ ํผํด์ผ ํฉ๋๋ค.
- ์ง์ญ๋ณ์๋ ์ต์ข ์ ์ด๊ณ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์ง์ญ ๋ณ์๋ ์์๋ก ๊ฐ์ฃผ๋์ง ์์ผ๋ฉฐ ์์๋ก ์คํ์ผ์ด ์ง์ ๋์ด์๋ ์ ๋ฉ๋๋ค.
- ์ ํ(Generic) ๋ณ์๋ ๋จ์ผ ๋๋ฌธ์, ์ ํ์ ์ผ๋ก ๋จ์ผ ์ซ์(์:ย
E
,ยT
,ยX
,ยT2
)๋ก ์ฌ์ฉํฉ๋๋ค.
(์์)
(O) maxAge
(O) Request
- ๋ผ์ด์ผ์ค
- Package ๋ฌธ
- Import ๋ฌธ
- ์์ค์ฝ๋ ๊ฐ์ ๋ฑ ์ฝ๋ฉํธ
- Class ์ ์ธ
Kernighan & Ritchie Style์์ ๋ณํ๋ one true brace style (**OTBS) ๋ฐฉ์์ ๋ฐ๋ฆ ๋๋ค.
return () -> {
while (condition()) {
method();
}
};
return new MyClass() {
@Override public void method() {
if (condition()) {
try {
something();
} catch (ProblemException e) {
recover();
}
} else if (otherCondition()) {
somethingElse();
} else {
lastThing();
}
int x = foo();
frob(x);
}
};
- if ์ ์ ๊ฒฝ์ฐ ๋จ ํ์ค์ด์ด๋ ์ค๊ดํธ๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผํฉ๋๋ค.
- ๋จ, ์ฝ๋๊ฐ ์๋ ๋ฉ์๋๋ ๋ฐ๋ก ๋ซ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค.
(์์)
...
void method(){}
...
- ๋ค์ฌ์ฐ๊ธฐ๋ ์คํ์ด์ค 4๊ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
- ์ค ๊ธธ์ด๋ 100๊ฐ์ ๋ฌธ์๋ก ์ ํํฉ๋๋ค.
- ์ค ๋ฐ๊ฟ์ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ํ์ฉํฉ๋๋ค.
- ์ฌ๋ฌ๋ฌธ์ฅ์ด ๋ด๋ ค์จ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ๋ด๋ ค์จ ๋ฌธ์ฅ๊ณผ ๋์ผํ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ ์งํฉ๋๋ค.
(์์ )
List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2);
numbers.stream()
.filter(i -> i % 2 == 0)
.distinct()
.forEach(System.out::println);
AnnotationConfigApplicationContext ac =
new AnnotationConfigApplicationContext(SameBeanConfig.class);
- if, for, catch ์ ( ์ฌ์ด์ ๊ณต๋ฐฑ๋ฌธ์ ์ฝ์ .
- else์ catch โ}โ์ฌ์ด์ ๊ณต๋ฐฑ๋ฌธ์ ์ฝ์ .
- , ๋ค์์ ๊ณต๋ฐฑ๋ฌธ์ ์ฝ์ .
- ์์ฝ์ด ๋ด์์ ์ฌ์ฉํ๋ ; ๋ค์๋ ๊ณต๋ฐฑ๋ฌธ์ ์ฝ์ .
- infix ์ฐ์ฐ์์ ๊ฒฝ์ฐ ์, ๋ค๋ก ๊ณต๋ฐฑ๋ฌธ์ ์ฝ์ .
Boolean test = true;
if (test) {
//...
} else {
//...
}
int testNum = 2 + 1 * (4 / 2) - 25;
for (int i = 0; i < 3; i++) {
//
}
- ๋ค์ฌ์ฐ๊ธฐ ์ ์ฉํ์ง ์์
- ์ ํ-์ฌ์ฉ ์ด๋ ธํ ์ด์ (Type-use annotations)
- ์ฌ์ฉํ ์๋ณ์ ์์์ ์ ์ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ. ์ด๋ ธํ ์ด์ ์ด ๋ฉํ ์ด๋ ธํ ์ด์ ์ธ ๊ฒฝ์ฐ ์ ํ-์ฌ์ฉ ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ฐ์ฃผํจ.
- ex : @Target(ElementType.TYPE_USE)
final @Nullable String name;
public @Nullable Person getPersonByName(String name);
@NotNull
public Person person
- ํด๋์ค ์ด๋ ธํ ์ด์ (Class annotations)
- ํด๋์ค ์ ์ธ ์ ์ค ํน์ ๋ผ์ธ์์ ์ฌ์ฉ๊ฐ๋ฅ
@Override
@Nullable
public String getNameIfPresent() { ... }
@Partial @Mock DataLoader loader;
- ๊ฐ ์ ์ด์๊ฐ ๋์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์๋ ์์์ ๋ฐ๋ฆ
public protected private abstract default static final transient volatile synchronized native strictfp
- ๋๋ฌธ์ ์ฌ์ฉ
(์์)
(O) 30000000L
(X) 30000000l
- ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ ๋ชจ๋ ๊ฒฝ์ฐ์๋ ํ์ ๊ธฐ์ ํจ
- ๋ถ๋ชจ ์ชฝ์์ @Deprecated๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ ์์ ์ชฝ ์๋ต ๊ฐ๋ฅ
- ๋ชจ๋ ์์ธ๋ ํ์๋ก ์ฒ๋ฆฌํ๋ค
- ๋ง์ฝ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์ด์ ์ ๋ํด ๋ช ํํ ์ฃผ์์ ์ฒจ๋ถํจ
- ํ ์คํธ ์ฝ๋์์๋ ํ์ ์ ๋ฌด์ ๊ฐ๋ฅ
- ํด๋์ค ๋ช ์ผ๋ก ์ ๊ทผํ๋ค.
Foo aFoo = ...;
Foo.aStaticMethod(); // good
aFoo.aStaticMethod(); // bad
somethingThatYieldsAFoo().aStaticMethod(); // very bad
๊ฐ๋ฏผ์ค์ด ์์ฑํ๊ณ ๋ฐํ์ฑ์ด ๊ฒ์ํ์์ต๋๋ค. ๋์์ ์ฃผ์ ๋ฐํ์ฑ์๊ฒ ๊ฐ์ฌ ์ธ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค.