๐ฅ [JAVA] Backend ๊ธฐ์ด๋ฅผ ์ํ JAVA ๊ธฐ๋ณธ ๋ค์ง๊ธฐ
Back-end ์ ๊ธฐ์ด๋ฅผ ์๊ธฐ ์ํ JAVA ํ์ต ํ์ด์ง์ ๋๋ค.
JAVA SPEC
J2SE (Java To Standard Edition)
์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํต์ฌ ํ๋ซํผ ๊ธฐ๋ณธ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM), ๊ฐ๋ฐ ๋๊ตฌ ๋ฑ์ด ํฌํจ JDBC
J2EE (JAVA To Enterprise Edition)
J2SE๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ์ฌ์ ์ ๊ณต ์น ์๋น์ค, ๋ถ์ฐ ์ปดํจํ , ํด๋ผ์ฐ๋ ์๋น์ค ๋ฑ์ ๊ฐ๋ฐํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ํฌํจ ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์, ๋์์ฑ ์ ์ด ๋ฑ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณต Servlet, JSP, Framework
๋ ์ฐจ์ด๋ WAS
์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
JAVA ์ ์คํ ๋จ๊ณ
1. ์์ค์ฝ๋ ์์ฑ
- ์ฝ๋๋ฅผ ์์ฑํ๋ฉด
.java
ํ์ฅ์๋ก ํ์ผ์ด ์ฒ์์ ์์ฑ์ด ๋๋ค.
2. ์ปดํ์ผ ๊ณผ์
- ์๋ฐ ์ปดํ์ผ๋ฌ
javac
์ด ์์ค์ฝ๋.java
๋ฅผ ์ฝ๊ณ ๊ตฌ๋ฌธ์ ๋ถ์ - ์ปดํ์ผ๋ฌ๋ ์์ค์ฝ๋๋ฅผ ๋ณด๊ณ ์ค๋ฅ๊ฐ ์๋ค๋ฉด
bite-code
๋ก ์ค๊ฐํํ ๋ณํ์ ํจ - ํด๋น
bite-code
๋ Platform-independence (ํ๋ซํผ ๋ ๋ฆฝ์ ) ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ํ ์ด์์ฒด์ ์์ ์คํ ๊ฐ๋ฅ
3. ๋ก๋ฉ
- ์๋ฐ ๊ฐ์๋จธ์ (JVM) ์์ ํ์ํ
.class
ํ์ผ์ ๋ก๋ - ์ด ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก load ํ๊ณ ๋ค๋ฅธ class ๋ method ๋ก ์ฐ๊ฒฐ
4. Bite-code ๊ฒ์ฆ
- load ๋
Bite-code
๋ ๋ณด์์ ์ํด ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์นจ
5. ์คํ
- ๊ฒ์ฆ์ ํต๊ณผํ
Bite-code
๋Java-Interpreter
์ ์ํด ์คํ - ์ธํฐํ๋ฆฌํฐ๋ ํ์ค์ฉ ์ฝ๊ณ ์คํํ๋ฉฐ
JIT
์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ์คํ ์๋๋ฅผ ๋์ผ ์ ์์ - ํ๋ก๊ทธ๋จ ์คํ์
main
๋ฉ์๋ ํธ์ถ์์ ์์๋๋ฉฐ ์ง์ ์ ์ด ๋จ
6. ์คํ ์ข ๋ฃ
main
๋ฉ์๋์ ์คํ์ด ์๋ฃ ๋๋ฉด, ํ๋ก๊ทธ๋จ ์คํ์ ์ข ๋ฃ ๋จ- ํ์ํ ๊ฒฝ์ฐ
JVM
์ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๊ณ ์์คํ ๋ฆฌ์์ค๋ฅผ ํด์
Test Class ์คํ๊ณผ์
(์ ๋ฐ์ ์ธ ์น ํ์ด์ง์ ํ๋ฆ๋)
- ์นํ์ด์ง๋ ์ฃผ๋ก ํด๋น ๊ทธ๋ฆผ์ ํ๋ฆ์ ๋ฐ๋ผ ์งํ๋๋๋ฐ, Java ์ Test ํ์ผ์ ์ฃผ๋ก
Client
๋จ์์์ ์์ ์ ๋์ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class NoteBook {
String brand;
int price;
// ๊ฐ ์ฃผ์
ํ๋ ์ด๊ธฐํ
public void setNoteBook (String brand, int price) {
this.brand = brand;
}
// ๊ฐ ๋ณํ
public String getNoteBook() {
return brand;
}
}
class NoteBookTest {
// Client ์ ํด๋น
public static void main() {
// ์ฒซ๋ฒ์งธ ์คํ๋ผ์ธ
NoteBook nb = new NoteBook();
nb.setNoteBook();
System.out.println(nb.getNoteBook());
}
}
Java ์ Heap ์ฌ์ฉ๋ฒ
Shirt s1 = new Shirt();
์ฝ๋ ์คํ ์, JVM์ Shirt ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ ์์ฑ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ s1 ๋ณ์์ ํ ๋น
s1์ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ, ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ Shirt ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ(Reference)
์์ฑ ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ์๋์ผ๋ก Heap ์ ๊ฐ์ด ์ง์์ง๋๊ฒ ์๋ ์ฐ๊ฒฐ๋ง ๋๊ธด๋ค.
๋ฐ๋ผ์ ์ฃผ์๊ฐ์ด ๋ฐ๋๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด์ด๊ณ , ์ฃผ์๊ฐ์ด ๊ฐ์์ผ ๊ฐ์ ๊ฐ์ด๋ค.
ํ์ง๋ง ๊ณ์
heap
์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ์์ฐ๋ ๊ฐ์ฒด๋ ํจ์๊ฐ ์๊ธฐ๊ธฐ ๋ง๋ จ์์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผ๊ฐ ๋๋ ๋ถ์์ฌ๊ฐ ๋ฐ์ํ๋ค.
Garbage Collector
๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ์ญํ ์ ์ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฃผ์ ๋ชฉ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํ๋ก๊ทธ๋จ์ด ๋ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋ ๊ฒ
Tight Coupling vs Loose Coupling
Tight Coupling
Tight Coupling
์์๋ ํ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ- ํ๋์ ์ปดํฌ๋ํธ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ๋ค๋ฅธ ์ปดํฌ๋ํธ์๋ ์ํฅ์ ๋ฏธ์นจ
- ํ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ํจ๊ป ๋ณ๊ฒฝ
- ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์
- ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์์ง
- ์์คํ ์ ์ฐ์ฑ์ด ๋จ์ด์ง
Loose Coupling
Loose Coupling
์์๋ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์๋์ ์ผ๋ก ๋ ๋ฆฝ์ - ํด๋์ค ๊ฐ์ ์ํธ ์์กด์ฑ์ด ๋ฎ๊ณ , ๊ฐ๊ฐ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์
interface
๋abstract
๋ฅผ ํตํด ์๋ก ์ฐ๊ฒฐ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ๋ํ ์ ๋ณด๋ ์ต์ํ- ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ํ์ฅ์ฑ์ด ์ข์
- ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง
Singletone Pattern
Client
์ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ์ Server
์์ ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํ์ฌ ๊ด๋ฆฌ- ์ด ์ํ์์
Client
์๋น์ค ์์ฒญ์ ๋ฉ์๋ ํ๋์ ๋งคํ ๋จ - ์์ฒญ์ด ์๋ฌด๋ฆฌ ๋ง์ด ๋ค์ด์ค๋๋ผ๋ ๋ฉ์๋๋ง ๊ณ์ ํธ์ถ๋๊ณ ํด๋์ค๋ ์ธ์คํด์ค ์์ฑ์ ๋์ด์ ์งํ๋์ง ์์
์ฅ์
์ธ์คํด์ค ์์ฑ ๋ฐ ์๋ฉธ ๊ณผ์ ์ ์ฑ๊ธํค ํด๋์ค ์์ฒด์์ ๊ด๋ฆฌ
์ธ์คํด์ค์ ๋ผ์ดํ์ฌ์ดํด๊ณผ ์ํ ๊ด๋ฆฌ๊ฐ ์ฉ์ด
๋จ์
์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ๊ธ๋ก๋ฒ ์ํ๋ฅผ ๋ง๋ค์ด, ์ฝ๋์ ์ฌ๋ฌ ๋ถ๋ถ์์ ์๋ก ์ํฅ์ ์ฃผ๊ณ ๋ฐ์ ์ ์์ด ๋๋ฒ๊น ๊ณผ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฑ๊ธํค ์ธ์คํด์ค์ ๋์ ์ก์ธ์ค๋ฅผ ์ ์ดํ์ง ์์ผ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
JAVA ์๋ฃ๊ตฌ์กฐ
Collection
- ๊ฐ์ฅ ์์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฃ๋ฅผ ์ ์ฅํ๋ฉฐ ์์๊ฐ ์๊ณ ์ค๋ณต ๊ฐ๋ฅ
Collection
์ธํฐํ์ด์ค ์์ฒด๋ก๋ ์ธ์คํด์คํํ ์ ์์ผ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์ ๊ณตํ๋ ํด๋์ค (ArrayList, HashSet โฆ) ๋ฅผ ์ฌ์ฉ
List
- ์์๊ฐ ์๊ณ ์ค๋ณต ๊ฐ๋ฅ
- ์์์ ๊ณผ ๋์ ์ ๊ฐ์ง๋ฉด์ ํ์ํ์ผ๋ก ์๋ฃ๋ฅผ ์ ์ฅํจ
- ์ธํฐํ์ด์ค๋ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ ๊ณต, ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ก ์๋ฃ ์ ๊ทผ๊ฐ๋ฅ
Set
- ์์๊ฐ ์๊ณ ์ค๋ณต๋์ง ์์
Collection
๋ค์์ผ๋ก ์์์ ์ผ๋ก ์๋ฃ์ ์ฅ- ์ฃผ๋ก ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ
Map
- ์์๊ฐ ์๊ณ ์ค๋ณต๋์ง ์์
key
value
๋ก ๋ฌถ์ด์ ์ ์ฅ- ๊ฐ ํค๋ ๊ณ ์ ํด์ผ ํ๋ฉฐ, ํ๋์ ํค๋ ์ ํํ ํ๋์ ๊ฐ์ ๋งคํ
Collection
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ง ์์
JAVA Exception
Throwable
- JAVA ์์์ ์์ธ์ฒ๋ฆฌ ์ต์์ class
Error
- ์์คํ ์ ์ํด ๋ฐ์ํ๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ํ๋
- Error ๋ฐ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ๊ฒ์ด ์ ์
Exception
- ํด๋์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์์ธ์ ์ธ ์ํฉ
Checked Exception
- ๋ช ์์ ์ธ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์
- ์ปดํ์ผ ์์ ์ ๋ฐ์ ํ๋ก๊ทธ๋จ์์ ํ๋ณต ๊ฐ๋ฅํ ์์ธ์ฒ๋ฆฌ
IOException
,SQLException
Unchecked Exception (Runtime Exception)
- ๋ฐํ์ ์ ๋ฐ์ํ๋ฉฐ, ๋ช ์์ ์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์
- ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ๋ฒ๊ทธ๋ ์๋ชป๋ ์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์
NullPointerException
,ArrayIndexOutOfBoundsException