Java#
์ธ์ด ์์ฒด์ ๋ํ ์ ๋ณด#
์ฌ ๋ง์ดํฌ๋ก์ฆ ์์คํ ์ฆ์์ 1995๋ ๊ฐ๋ฐ
ํ์ฌ๋ ์ค๋ผํด์ด ์ธ์ํด์ Java์ ์ ์๊ถ์ ์ค๋ผํด์ ์๋ค.
C#๊ณผ ๋ฌธ๋ฒ์ ์ฑํฅ์ด ๊ต์ฅํ ๋น์ทํ๋ค
Java SE(Standard), Jakarta EE(Enterprise Server), Java ME(Embedded system)
OOP(๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด)
๊ฐ์ฒด ์งํฅ์ด๊ธด ํ๋ ์์ ํ์ ์ ๊ฐ์ฒด ์ทจ๊ธ ํ์ง ์๋๋ค.
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ
Maven(๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ, ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ ๋ฐฐํฌ ๊ด๋ฆฌ ๋๊ตฌ)
Gradle - ์๋๋ก์ด๋ ํ๋ก์ ํธ ๊ธฐ๋ณธ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ
ํ๋ก๊ทธ๋จ ์คํ ์์#
JDK(java dev kit, ~.java) \(\to\) javac(compiler, ~.class) \(\to\) JVM(java vm) \(\to\) cpu
c๋ ๊ธฐ๊ณ์ด๋ก ์ง์ ์ปดํ์ผ ํ์ง๋ง, java๋ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ์ปดํ์ผํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
ํ๋ซํผ์ ๋ง๋ JVM๋ง ์ค์นํ๋ฉด ์ด๋์๋ ๊ฐ์ ์ฝ๋๋ก ๋์์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
ํด์ ํ๋ซํผ ๋ ๋ฆฝ์ ์ด๋ผ๊ณ ํ๋ค.
JVM์ ํด๋์ค๋ฅผ ์ด๋์ ์ฐพ์ต๋๊น?
CLASSPATH(ํ์ฌ๋ .)์์ ์ฐพ์์ .class ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์คํ์ํจ๋ค.
ํ์ฌ ๊ฒฝ๋ก๋ผ๊ณ ๋งํ๋ฉด ์ด์ง๋ฌ์์ง๋ค(๋ฉด์ ๋)
๋์ผํ ํ์ผ๋ช ์ ๊ฐ์ง .class ๋ฐ์ดํธํ์ผ์ classpath์์ ์ฐพ์์ ์ฝ์ด๋๋ฆฐ ํด๋์ค ์ ๋ณด๋ฅผ heap์ ์ฌ๋ฆฐ๋ค.
์ธ์คํด์ค๊ฐ ์๋๋ผ๋ ์ ์ ์ฃผ์ํ์.
static method, instance method์ ๋ํ ์ ๋ณด๋ฅผ ์ด์ ๋ชจ๋ ์๋ค.
๊ฐ์ฅ ๋จผ์ main method๋ฅผ ์ฐพ๊ณ ์คํํ๋ค.
์ฝ๋ ๊ตฌ์กฐ#
/* ํด๋์ค ๋ธ๋ก */
public class ํด๋์ค๋ช
{
/* ๋ฉ์๋ ๋ธ๋ก */
[public|private|protected] [static] (๋ฆฌํด์๋ฃํ|void) ๋ฉ์๋๋ช
1(์
๋ ฅ์๋ฃํ ๋งค๊ฐ๋ณ์, ...) {
๋ช
๋ น๋ฌธ(statement);
...
}
/* ๋ฉ์๋ ๋ธ๋ก */
[public|private|protected] [static] (๋ฆฌํด์๋ฃํ|void) ๋ฉ์๋๋ช
2(์
๋ ฅ์๋ฃํ ๋งค๊ฐ๋ณ์, ...) {
๋ช
๋ น๋ฌธ(statement);
...
}
...
}
block#
ํด๋์ค ๋ธ๋ญ
๋ฉ์๋ ๋ธ๋ก(Method Blocks)
์กฐ๊ฑด๋ฌธ ๋ธ๋ก(Conditional Blocks)
๋ฐ๋ณต๋ฌธ ๋ธ๋ก(Loop Blocks)
์ต๋ช ๋ธ๋ก(Anonymous block) - instance initialization block, static initial block
์์ ๊ฐ์ ์ฌ๋ฌ ๋ธ๋ก์ด java์์ ์กด์ฌํ๋ค. ๋ธ๋ก์ ์ฝ๋์ ๊ตฌ์กฐ, ์กฐ๊ฑด ๋ฐ ๋ฐ๋ณต ์ ์ด, ๋ณ์์ ๋ฒ์ ์ ํ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ญํ ์ ํ๋ฉด์ ๋ฒ์๋ฅผ ๊ท์ ํ๋ ์ญํ ์ ํ๋ค. ๋ธ๋ก ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ๊ทธ ๋ธ๋ก ๋ด์ ์๋ง ์ ํจํ ๋ธ๋ก scope๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ธ๋ก ๋ฐ์์๋ ์ ๊ทผํ ์ ์๋ค.
main method๋ณด๋ค ๋จผ์ ์คํ๋๋ ๊ฒ์ด ์์๊น? ๊ทธ๊ฑด ๋ฐ๋ก static block์ด๋ค.
/* ํด๋์ค ๋ธ๋ก */
public class ํด๋์ค๋ช
{
}
ํด๋์ค์ ์ด๋ฆ์ Main์ด ์ผ๋ฐ์ ์ด์ง๋ง ๋ค๋ฅธ ๊ฒ์ผ ์๋ ์๋ค. ํ์ง๋ง ํด๋์ค ์ด๋ฆ์ ํ์ผ์ ์ด๋ฆ๊ณผ ๊ฐ์์ผํ๋ค(className.java).
/* ๋ฉ์๋ ๋ธ๋ก */
[public|private|protected] [static] (๋ฆฌํด์๋ฃํ|void) ๋ฉ์๋๋ช
1(์
๋ ฅ์๋ฃํ ๋งค๊ฐ๋ณ์, ...) {
๋ช
๋ น๋ฌธ(statement);
...
}
ํด๋์ค ๋ธ๋ญ ์์ highlight๋ ๋ถ๋ถ์ด method block ์ด๋ค.
๋ช
๋ น๋ฌธ(statement);
๋ฉ์๋ ๋ธ๋ญ ์์ ์ด์ Statement ๋ช
๋ น๋ฌธ
์ด ์๋ค. ์ด์ ์ค์ ๋ก ์ปดํจํฐ๊ฐ ๋์ํด์ผํ๋ ๋ถ๋ถ์ ๋ํ ๊ท์ ์ด ๋ค์ด๊ฐ ์๋ค.
- public|default|private|protected
์ ๊ทผ์ ์ด์(access modifier), private \(\to\) defautl \(\to\) protected \(\to\) public ์์ผ๋ก ์ ๊ทผ๊ฐ๋ฅ ๋ฒ์๊ฐ ๋์ด์ง๋ค.
private
: ํด๋น ํด๋์ค ์์์๋ง ์ ๊ทผ ๊ฐ๋ฅdefault
: ๋ณ๋ ์ง์ ์๋๋ฉด ์ด๊ฑฐ๋ค. ๋์ผํ package(folder) ์์์๋ง ์ ๊ทผ ๊ฐ๋ฅprotected
: ๋์ผ package์ ํด๋์ค ๋๋ ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅpublic
: ์ด๋ค ํด๋์ค์์๋ ์ ๊ทผ ๊ฐ๋ฅ
- static method
์๋ฌด๊ฒ๋ ์์ผ๋ฉด instance initialization block์ด๋ฉฐ, ์ด๋ด ๊ฒฝ์ฐ์๋ instance๋ฅผ ๋ง๋ค ๋๋ง๋ค ์คํ๋๋ค. ์ฆ instance๋ง๋ค ์ด๊ธฐํ ๊ฐ์ ๋ค๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ฐ๋ฉด static์ผ ๊ฒฝ์ฐ์๋ static initial block์ด๋ผ๊ณ ํด์ ํด๋์ค๊ฐ ์ฒ์ JVM์ ๋ก๋๋ ๋ ํ ๋ฒ๋ง ์คํ๋๋ค. ์ฃผ๋ก ํด๋์ค ๋ณ์ ์ด๊ธฐํ์ ์ฌ์ฉ๋๋ค. ๋ชจ๋ instance๊ฐ ๊ฐ์ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๊ธฐ๋ฅผ ์ํ ๋ ์ฌ์ฉํ๋ค. ์ง์ ํ ์ด๊ธฐํ ๋๋์ค? ์ธ์คํด์ค ์์ฑ์์ด ์คํ๋ ์ ์์ผ๋ฉฐ ๊ทธ ์ด์ ๋ static์ ์ฌ์ฉํ ๋ณ์๋ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ ์๋์ผ๋ก ํ๋ ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Heap memory
์ฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ํ๋ ๋ถ๋ถ์ heap์ ๋งํ๋ค. heap์ ์๋ฃ๊ตฌ์กฐ์ ํ๋๋ก์จ max,min์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ํ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ผ์ ํ ํน์ง์ ๊ฐ์ง๋ ๊ตฌ์กฐ์ ์๋ฃ๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค. ํ์ด์ฌ์ heapq๋ ์ด๋ฌํ ํน์ง์ built-in์ผ๋ก ๊ตฌํํด ๋์ ๊ฒ์ด๋ค.
class.static
static method๋ ํด๋์ค ๋ช ๋ค์์ ์ฌ์ฉํด์ค๋ค. ์ด๊ฒ ํ๋ก๊ทธ๋๋จธ ๊ฐ์ ๊ด๋ก์ด๋ฉฐ, ๊ฐ๋ ์ฑ์ด ๋๊ณ ์ฝ๋์ ์ง๋ณด์์๋ ๋์์ด ๋๋ค. ์ฐธ์กฐ๋ณ์.static ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์ด์ผ๊ธฐ์ด๋ค.
- (๋ฆฌํด์๋ฃํ|void)
๋ฉ์๋์ ๋ฆฌํด ์๋ฃํ์ ๊ท์ ํ๋ ๋ถ๋ถ์ด๋ค. void์ผ ๊ฒฝ์ฐ๋ ๋ฆฌํด๊ฐ์ด ์์์ ์๋ฏธํ๋ค. null๋ ์๋๋ผ ์์ ๋ฐํํ๋๊ฒ ์๊ธฐ ๋๋ฌธ์ ๋ณ์์ ํ ๋นํ๋ ค๋ฉด compile error๊ฐ ๋ฐ์ํ๋ค.
- ๋ฉ์๋๋ช 1(์ ๋ ฅ์๋ฃํ ๋งค๊ฐ๋ณ์, โฆ)
์ฌ๊ธฐ์ ๋ถํฐ ํ๋ก๊ทธ๋จ์ด ์์๋๋ค. ๊ทธ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
String[] args
: str list๊ฐ ๋ณ์๋ก ๋ค์ด์์ผ ํ๊ณ ๋ฐ์์๋ args๋ก ์ฌ์ฉํ๋ค. ์๋ฃํ + ๋ณ์๋ช
ํด๋์ค๋ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
System.out.println
: ๋ง์น ์๋์ฐจ.์์ง.์๋ํด ์ฒ๋ผclass.field.method
๊ทธ๋ฆฌ๊ณ ์ด ๊ธด ๊ฒ์ ๋ช ๋ น๋ฌธ(statement)๋ผ๊ณ ํ๋ค.
Field#
ํด๋์ค๊ฐ ๊ฐ์ง๋ ์์ฑ์ java์์ Field๋ผ๊ณ ๋งํ๋ค.
๋ค๋ฅธ ์ธ์ด์์๋ ๋ฉค๋ฒ๋ณ์๋ผ๊ณ ๋งํ๊ธฐ๋ ํ๋ค.
ํ๋๋ ์ด๋ค ํค์๋์ ํจ๊ป ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ์ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง๋ค.
์ข ๋ฅ
Class Field : static
Instance Field : โ static
ํ๋๋ ์ฒซ๋ฒ์งธ ๊ธ์ง๋ ์๋ฌธ์๋ก ์์ํ๋ ๊ฒ์ด ๊ด๋ก์ด๋ค.
[์ ๊ทผ์ ํ์ : public|default|private|protected] [static] [final] type fieldName [=default_value|false|null];
์ค์ํ ๊ฒ์ static method(class method) ์์์๋ static field(class field)๋ง ์ฌ์ฉํ ์ ์๋ค. ๊ทธ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋ ์์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. class method(static)๋ ์ธ์คํด์ค๊ฐ ์์ด๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ณ ์์ฑ๋๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ฉด instance field๋ ์ธ์คํด์ค๊ฐ ์์ด์ผ๋ง(์ ์ธํด์ผ๋ง), ๊ทธ๋์์ผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค. class method๊ฐ ์คํ๋๋ ์์ ์์๋ instance field๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋๊น ์ฌ์ฉํ ์ ์๊ณ \(\to\) compile error๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
1public class Person {
2 String name; // instance field
3 String address;
4 boolean isVip;
5 static int count = 0; // class field
6
7 public void printName(){
8 System.out.println("my name is " + name);
9 }
10
11 public static void printCount(){
12 // System.out.println(name)
13 // static method์์๋ [instance field, instance method] ๋ถ๊ฐ
14 System.out.println("count : " + count);
15 }
16}
Memory ๊ด๋ฆฌ#
new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋จ
์ธ์คํด์ค๋ ๋ ์ด์ ์ฐธ์กฐ๋๋ ๊ฒ์ด ์์๋ - Garbage collection ๋๋ค.
static field๋ ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ๋ฑ ํ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ ์ด๊ธฐํ๋จ
instance method๋ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ๋์ ๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ์ด์ฉํด ์ฌ์ฉํ ์ ์๋ค.
something.methodName
class method๋
className.methodName();
์ผ๋ก ์ฌ์ฉ๋ฉ์๋ ์์ ์ ์ธ๋ ๋ณ์๋ค์ ๋ฉ์๋๊ฐ ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋์๋ค๊ฐ, ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ์ฌ๋ผ์ง๋ค. scope๊ฐ local์ ํ์