Post

๐Ÿฅœ [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 ์€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œ

image-01


Test Class ์‹คํ–‰๊ณผ์ •

image-02 (์ „๋ฐ˜์ ์ธ ์›น ํŽ˜์ด์ง€์˜ ํ๋ฆ„๋„)

  • ์›นํŽ˜์ด์ง€๋Š” ์ฃผ๋กœ ํ•ด๋‹น ๊ทธ๋ฆผ์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์ง„ํ–‰๋˜๋Š”๋ฐ, 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 ์˜ ๊ฐ’์ด ์ง€์›Œ์ง€๋Š”๊ฒŒ ์•„๋‹Œ ์—ฐ๊ฒฐ๋งŒ ๋Š๊ธด๋‹ค.

๋”ฐ๋ผ์„œ ์ฃผ์†Œ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด์ด๊ณ , ์ฃผ์†Œ๊ฐ’์ด ๊ฐ™์•„์•ผ ๊ฐ™์€ ๊ฐ’์ด๋‹ค.

image-03 (JVM ์—์„œ์˜ 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 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š์Œ

image-04

JAVA Exception

Throwable

  • JAVA ์—์„œ์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ตœ์ƒ์œ„ class

Error

  • ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • Error ๋ฐœ์ƒ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆ

Exception

  • ํด๋ž˜์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ

Checked Exception

  • ๋ช…์‹œ์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”
  • ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐœ์ƒ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํšŒ๋ณต ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • IOException, SQLException

Unchecked Exception (Runtime Exception)

  • ๋Ÿฐํƒ€์ž„ ์‹œ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ช…์‹œ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Œ
  • ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ„๊ทธ๋‚˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒ
  • NullPointerException, ArrayIndexOutOfBoundsException

image-05

This post is licensed under CC BY 4.0 by the author.