โ˜•๏ธ

6 minute read

Java์—๋Š” ํ‘œ์ค€ ์ŠคํŽ™๊ณผ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์Œ.

Java๋ž€ ์ด๋Ÿฐ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ‘œ์ค€ ์ŠคํŽ™์ด ์žˆ์Œ! ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฐ ์ŠคํŽ™์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•œ โ€œ๊ตฌํ˜„์ฒดโ€๊ฐ€ ์žˆ์Œ.

  • OpenJDK (Oracle)
  • Corretto (Amazon)

๊ตฌํ˜„์ฒด ๋งˆ๋‹ค ๋™์ž‘์€ ๋™์ผํ•˜์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ์ž์˜ ์ž…๋ง›์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์„ ๊ฒƒ์ž„. Corretto ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” AWS ์„œ๋น„์Šค๋ž‘ ๊ถํ•ฉ์ด ์ข‹๋‹ค๊ณ  ํ•จ.

Java ํ‘œ์ค€ ์ŠคํŽ™์—๋Š” javac ์ปดํŒŒ์ผ๋Ÿฌ, Run Lib, JVM๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œ ๋˜์–ด ์žˆ์Œ.

Java ์ปดํŒŒ์ผ

javac ์š”๊ฒŒ Java์—์„œ์˜ ์ปดํŒŒ์ผ๋Ÿฌ์ž„. C์—์„œ์˜ gcc ๊ฐ™์€ ๋…€์„์ž„.

java๋Š” java ์ปจํŒŒ์ผ๋œ .class ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๋…€์„์ž„.

Static Method & Variable

ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค ์ž์ฒด์— ๊ณ ์ •๋œ ๋ฉค๋ฒ„์ž„. ๊ทธ๋ž˜์„œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ Method๋‚˜ Variable์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

static Variable์€ ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ ๊ด€์ ์—์„œ ๋ณด๋ฉด DATA ์„ธ๊ทธ๋จผํŠธ์— ์ €์žฅ๋˜๋Š” ๋ณ€์ˆ˜๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , ํด๋ž˜์Šค๋ผ๋Š” ์˜์—ญ์— ๋ฐ”์ธ๋”ฉ๋œ Global Variable๋กœ ๋ฐ›์•„๋“ค์ด๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Static์™€ non-static Method์˜ ์ฐจ์ด๋Š” ๊ทธ Method๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, this ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ƒ ์•„๋‹ˆ๋ƒ ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ this๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ–๋Š” ๊ฐ’์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฑด instance method ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด static method๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค!

CLASSPATH

java์™€ javac์—์„œ ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ์ธ์ง€ ์ง€์‹œํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค.

Kafka Connector๋ฅผ ๋„์šธ ๋•Œ, ์–ด๋–ค Connector Plugin์„ ์จ์•ผ ํ• ์ง€๋„ ์š” CLASSPATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. [ref]

๋งŒ์•ฝ CLI ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด,

$ javac --class-path /path/to/class MyClass.java
$ java --class-path /path/to/class MyClass

์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด ์„ ์–ธ

ArrayList<Integer> numbers = new ArrayList<>();

์ด๋•Œ, int๋ผ๋Š” ์ •์ˆ˜ํ˜•์ด ์žˆ๋Š”๋ฐ, ์™œ Integer๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š๋ƒ์ž„. ์ด์œ ๋Š” ArrayList๋Š” Java์˜ Generic ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ์ฒด ํƒ€์ž…๋งŒ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•จ. ๊ทธ๋ž˜์„œ int native ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ Integer๋ผ๋Š” ๊ฐ์ฒด ํƒ€์ž…์„ ์จ์•ผ ํ•œ๋‹ค๊ณ  ํ•จ.

java.lang ํŒจํ‚ค์ง€

  • System
  • Integer, Double, String
  • Object

โ€œํŒจํ‚ค์ง€โ€์ง€๋งŒ, ๋ชจ๋“  ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž๋™์œผ๋กœ import ๋จ. ๊ทธ๋ž˜์„œ System.out.println()์„ ์“ธ ๋•Œ,

Java 11

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ํ˜ธํ˜ธ์˜ Java 11

์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š”์ง€?

์ธํ”„๋Ÿฐ์—์„œ ์š” ๊ฐ•์˜๊ฐ€ ๋ฌด๋ฃŒ๋กœ ํ’€๋ ค์žˆ๊ธธ๋ž˜ ์ผ๋‹จ ์š” ๊ฐ•์˜๋กœ ์‹œ์ž‘ ํ–ˆ์Šต๋‹ˆ๋‹ค.

โ€œ๊น€์˜ํ•œ์˜ ์ž๋ฐ” ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž๋ฐ” ์ฒซ๊ฑธ์Œโ€

๋ฌด๋ฃŒ๋ผ์„œ ๋ถ€๋‹ด๊ฐ ์—†์ด ์‹œ์ž‘ํ•ด๋ณธ ๊ฒƒ ๊ฐ™๊ณ , ์ฒ˜์Œ์— Java๋ผ๋Š” ์–ธ์–ด์™€ ์ƒํƒœ๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ฐธ ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์˜ ๋’ท๋ถ€๋ถ„์€ ๊ฐœ๋ฐœ์„ ์™„์ „ ์ฒ˜์Œ ํ•˜๋Š” ์‚ฌ๋žŒ ์œ„์ฃผ๋กœ ๋งž์ถฐ์ ธ ์žˆ์–ด์„œ ๋น ๋ฅด๊ฒŒ ๋„˜๊ฒผ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๊ฐ•์‚ฌ๋ถ„์ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๋“ค ์ค‘์—๋Š” ์ค‘๊ธ‰ ~ ๊ณ ๊ธ‰ ๋ถ€๋ถ„์ด ์ œ๊ฐ€ ๋” ์žฌ๋ฐŒ๊ฒŒ ๊ณต๋ถ€ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฃผ์ œ๋“ค์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

์ง€๊ธˆ์€ ๋ฐฑ์ค€์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์–ธ์–ด์˜ ๋ง›์„ ๋Š๊ปด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

๋ฐฑ์ค€์—์„œ Java ์ž…์ถœ๋ ฅ

๋ฐฑ์ค€์„ ํ’€ ๋•Œ๋Š” ์ž…์ถœ๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•  ์ ๋“ค์ด ํ•ญ์ƒ ์žˆ๋‹ค.

Scanner

Scanner sc = new Scanner(System.in)
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
sc.close();

BufferedReader, BufferedWriter

๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด, ๋ถ„๋ช… ๋กœ์ง๊ณผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ตœ์ ์ธ๋ฐ๋„ โ€œ์‹œ๊ฐ„์ดˆ๊ณผโ€๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด๊ฒƒ์€ Scanner์™€ System.out.print()๊ฐ€ ์ž…์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋Š๋ ค์„œ ๊ทธ๋Ÿฐ ๊ฒƒ์œผ๋กœ โ€œ๋ฒ„ํผ๋งโ€ ๊ธฐ์ˆ ์„ ์“ฐ๋Š” BufferedReader์™€ BufferedWriter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์š” ๋ฒ„ํผ๋ง์€ ์ด๋ฒˆ์— ๋ณตํ•™ํ•ด์„œ ๋“ค์€ ์šด์˜์ฒด์ œ(OS) ์ˆ˜์—…์—์„œ ๋ฐฐ์› ๋˜ ๋‚ด์šฉ์ธ๋ฐ, ์ด๋ ‡๊ฒŒ ๊ธˆ๋ฐฉ ๋‹ค์‹œ ๋งŒ๋‚˜๋‹ค๋‹ˆ ใ…‹ใ…‹ ๋ฐ˜๊ฐ‘๋‹ค.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());

br.close();
bw.flush();
bw.close();

์ด๋•Œ, ์ฃผ์˜ํ•  ์ ์€ bw.write(int n)์™€ ๊ฐ™์ด ์ •์ˆ˜๋ฅผ bw.write() ํ•  ๊ฒฝ์šฐ ์ด๊ฑธ ์ˆซ์ž String์ด ์•„๋‹ˆ๋ผ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ํ•ด์„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ •์ˆ˜ ์ถœ๋ ฅ ๋•Œ๋Š” String.valueOf(int n)์œผ๋กœ String์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„์— ์ถœ๋ ฅ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.


Spring

https://start.spring.io/

  • Spring Boot!
    • ๋‚ด๋ถ€์— tomcat ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค!
    • ๊ทธ๋ƒฅ Spring๋งŒ ์“ธ ๋•Œ๋Š” tomcat ์„œ๋ฒ„๊นŒ์ง€ ์ง์ ‘ ์šด์˜ํ•ด์•ผ ํ–ˆ์Œ.
  • Component Scan @Component

Spring Boot๊ฐ€ ์งฑ์ด๋‹ค

๊ทธ๋ƒฅ Spring์„ ์“ฐ๊ฒŒ ๋˜๋ฉด, ๋‚ด์žฅ ์„œ๋ฒ„๊ฐ€ ์—†์–ด์„œ ๋ณ„๋„์˜ tomcat ์„œ๋ฒ„๋ฅผ ๋„์›Œ์•ผ ํ•จ.

๋ฐ˜๋ฉด์— Spring Boot์—๋Š” tomcat ์„œ๋ฒ„๊ฐ€ ๋‚ด์žฅ ๋˜์–ด ์žˆ์Œ(embedded server). ๊ทธ๋ž˜์„œ ์„œ๋น™ ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋กœ ๋””ํ”Œ๋กœ์ด ํ•  ํ•„์š” ์—†์Œ.

Java Bean

์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” Java ํด๋ž˜์Šค๋ฅผ ์ง€์นญํ•จ. ์ด๋Ÿฐ ๊ทœ์น™๋“ค์„ Java Bean ํ‘œ์ค€์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.
  • ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” private์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•จ.
  • Getter์™€ Setter ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•จ.
  • Java Bean ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก์„ ์œ„ํ•ด java.io.Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ.

์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” Java์—์„œ ๊ฐ์ฒด์˜ ์žฌ์‚ฌ์šฉ ์„ฑ์„ ๋†’์ด๊ณ , ๋” ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ์ž„.

JDBC Integration Test

  • @SpringBootTest
    • ์š” Annotation์€ Test ์ฝ”๋“œ์—์„œ Spring ์ปดํฌ๋„ŒํŠธ๋ฅผ DI๋กœ ์ฃผ์ž… ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ
  • @Transactional
    • JDBC์— ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ํ›„์—, COMMIT ์—†์ด ROLLBACK์„ ์‹คํ–‰ํ•ด์„œ ํ•ด๋‹น ๋‚ด์šฉ์ด DB์— ๋ฐ˜์˜๋˜์ง€ ์•Š๋„๋ก!

์š”๊ฑฐ๋Š” Unit Test๋ž‘์€ ๋‹ค๋ฅธ ๊ฐœ๋…์ž„. Integration Test๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ๊นŒ์ง€ ํ…Œ์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ.

JDBC, JDBC Template, JPA, Spring Data JPA

AOP(Aspect-oriented Programming)

Categories:

Updated: