์ธ์คํด์ค ํ๋
ํด๋์ค ๋ฉ์๋(static O) vs ์ธ์คํด์ค ๋ฉ์๋(static X)
์ธ์คํด์ค ๋ณ๋ก ๋ค๋ฅด๊ฒ ๋์ํด์ผ ํ๋ค๋ฉด ์ธ์คํด์ค ๋ฉ์๋
static๋ฉ์๋๋ ๊ฐ์ฒด ์์ฑ์ด๋ ์ ํธ๋ฆฌํฐ ๊ด๋ จ์์ ์ฌ์ฉ ๋ ๋๊ฐ ์๋ค. ๋๋๋ก ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
ํ๋(field)
ํ๋๋ ํด๋์ค๊ฐ ๊ฐ์ง๋ ์์ฑ์ด๋ค. ๋ค๋ฅธ ์ธ์ด์์ ๋ฉค๋ฒ๋ณ์์ ๊ฐ๋ค.
ํ๋ ์ ์ธ ๋ฐฉ๋ฒ
[์ ๊ทผ์ ํ์][static][final] ํ์
ํ๋๋ช
[ = ์ด๊ธฐ๊ฐ] ; // []: ์๋ต ๊ฐ๋ฅํ๋ค๋ ํ์
์ ๊ทผ์ ํ์: public, protected, default, private
ํ๋๋ช : ์๋ณ์ ๊ท์น ๋ฐ๋ฆ. ์ฒซ๊ธ์ ์๋ฌธ์๊ฐ ๊ด๋ก
ํ์ :๊ธฐ๋ณธํ or ์ฐธ์กฐํ
์ด๊ธฐ๊ฐ์ด ์์ ๊ฒฝ์ฐ: ์ฐธ์กฐํ์ผ ๊ฒฝ์ฐ null / booleanํ์ผ ๊ฒฝ์ฐ false / ๋๋จธ์ง ๊ธฐ๋ณธํ์ 0 ์ผ๋ก ์ด๊ธฐํ
Tip
์๋ฐ์์ ๋ฌธ์์ด์ String ํด๋์ค๋ก ํํ๋๋ค. String ํด๋์ค๋ ๋ถ๋ณ(immutable)ํ๋ฉฐ, ์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ๋ํด์๋ ๋ฌธ์์ด ํ(string pool)์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ด์ฉ์ ๋ฌธ์์ด์ ํ๋์ ์ธ์คํด์ค๋ก ๊ณต์ ๋๊ณ , ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฌธ์์ด์ new๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋๋๋ก new๋ฅผ ์ฌ์ฉํ์ง ๋ง์
String strLiteral = "Hello, World!"; // ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์ฌ์ฉ
์๋์ ๊ฐ์ด new ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ String ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ ์ง์ํด์ผ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์์ด์ด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ๋งค๋ฒ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
String strInstance = new String("Hello, World!"); // new ํค์๋ ์ฌ์ฉ (์ง์ํด์ผ ํจ)
ํด๋์ค ๋ณ์(static ํ๋)
JVM์ CLASSPATH(ํ๊ฒฝ๋ณ์๋ ๋๋ฌธ์๋ก ์ฐ์)์์ ํด๋์ค๋ฅผ ์ฐพ์ ์คํํ๋ค.
Person p1 = new Person();
๊ฐ์ฅ ๋จผ์ JVM์ด Personํด๋์ค๊ฐ CLASSPATH์ ์๋์ง ์ฐพ์๋ณด๊ณ
Personํด๋์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค.
Personํด๋์ค ์ ๋ณด๋ฅผ ์ฝ์ด ๋ค์ผ ๋ staticํ ํ๋๋ ์ ์ ์์ญ์ ๋ฐ๋ก ์ ์ฅ ๋๊ณ ์ด๊ธฐํ๋๋ค.
์ฆ static ํ๋๋ ์ธ์คํด์ค ๋ณ๋ก ๊ฐ์ง๋ ๊ฒ์ด ์๋๋ผ ์ ์ ์์ญ์ ๋ฐ๋ก ๊ด๋ฆฌ๋๋ค.
ํด๋์ค๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด ClassNotFoundException ์ค๋ฅ๋ฅผ ๋ฐ์ํ๋ค.
PersonTestํด๋์ค๋ฅผ ์คํํ๋ฉด, Personํด๋์ค๋ฅผ ์ฐพ๊ฒ ๋๋ค.
Personํด๋์ค๋ฅผ ์ฐพ์ผ๋ฉด Personํด๋์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ฒ ๋๋ค.
ํด๋์ค ์ ๋ณด ์์ฒด๋ ์ ์ , ์ฆ ์คํ๋๊ณ ์์ง ์์.
ํด๋์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆด ๋, ํด๋์ค์ staticํ๋๊ฐ ์๋์ง ์ดํด๋ณธ๋ค.
์ฆ, ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ง ์์๋ Person์ด๋ผ๋ ํ์ ๋ง ์ฌ์ฉํ๋ฉด staticํ๋๋ ๋ฏธ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค.
staticํ๋๋ "ํด๋์ค๋ช . ํ๋๋ช ํ์"์ผ๋ก ์ฌ์ฉ
p1.count๋ณด๋จ Person.count ์ฐ๋ ๊ฒ์ด ์ ์ฉํ๋ค.
ํด๋์ค ๋ฉ์๋์์ ์ธ์คํด์ค ํ๋๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ด์
๋ฉ์๋๋ ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
public class Person {
String name;
String address;
boolean isVip;
static int count = 0;
public void printName(){
System.out.println("๋ด ์ด๋ฆ์" + name);
}
public static void printCount(){
System.out.println("count: " + count);
}
}
๊ทธ๋ฌ๋, static ๋ฉ์๋ ์์์๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ธ๋ ์ธ์คํด์ค ํ๋, ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. staticํ ํ๋๋ง ์ฌ์ฉํ ์ ์๋ค.
์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋ ์์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
static ๋ฉ์๋๊ฐ ์คํ๋๋ ์์ ์์๋ ์ธ์คํด์ค ํ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋๊น ์ฌ์ฉํ ์ ์๋ค๊ณ ์ปดํ์ผ๋ฌ ์ค๋ฅ ๋ฐ์
ํด๋์ค ๋ฉ์๋์ ํด๋์ค ํ๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ํด๋์ค๋ช .๋ฉ์๋๋ช (); or ํด๋์ค๋ช .ํ๋๋ช ; ํ์์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
ํด๋์ค ํ๋๋ static ๋ธ๋ก์์ ์ด๊ธฐํ ํ ์ ์๋ค.
JVM์ Person ํฌ๋์ค๋ฅผ CLASSPATH์์ ์ฝ์ด๋ค์ด๋ฉด์ staticํ๋, static ๋ฉ์๋๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ๋ฆผ.
instaceํ๋, instance ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ , ์ด ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํด์ผ ํ๋ค. ์ฆ, ์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง์ง ์์ผ๋ฉด ์ฌ์ฉํ ์ ๊ฐ ์๋ค.
์ ๋ฆฌํด๋ณด์
Instance method vs Static method
- ์ธ์คํด์ค ๋ฉ์๋(Instance methods)๋ ์ธ์คํด์ค ๋ฉ์๋(Instance methods)์ ์ธ์คํด์ค ๋ณ์(instance variables)๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ค.
- ์ธ์คํด์ค ๋ฉ์๋(Instance method)๋ ์ ์ ๋ณ์(static variables)์ ์ ์ ๋ฉ์๋(static methods)๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ค.
- ์ ์ ๋ฉ์๋(Static methods)๋ ์ ์ ๋ณ์(static variables)์ ์ ์ ๋ฉ์๋(static methods)๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ค.
- ์ ์ ๋ฉ์๋(Static methods)๋ ์ธ์คํด์ค ๋ฉ์๋(instance methods)์ ์ธ์คํด์ค ๋ณ์(instance variables)๋ฅผ ํธ์ถํ ์ ์๋ค. ๊ทธ๋ค์ ๋ฐ๋์ ๊ฐ์ฒด๋ฅผ ํตํด ์ฐธ์กฐํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ ๋ฉ์๋(static methods)๋ 'this' keyword๋ฅผ ์ฌ์ฉํ ์ ์๋ค. this๋ก ์ฐธ์กฐํ๊ธฐ ์ํ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
main๋ฉ์๋๋ณด๋ค ๋จผ์ ์คํ๋๋ static ๋ธ๋ก
public class Hello{
static int i;
static{
i=500;
System.out.println("static block");
}
pulbic static void main(String[] args){
System.out.println("hello");
}
}
์ปดํ์ผ ์: javac Hello.java
์คํ ์: java Hello -> CLASSPATH์์ helloํด๋์ค๋ฅผ ์ฐพ์ -> ํด๋์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ.
์ด๋ staticํ๋, ๋ฉ์๋๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํจ
staticํ๋๋ ๋ฐ๋ก ๊ฐ์ ๋ฃ๊ฑฐ๋ static block์์ ๊ฐ ์ด๊ธฐํ
๊ทธ ๋ค์์, JVM์ ํด๋์ค ๋ฉ์๋ ์ค์์ String[]์ ๋ฐ์๋ค์ด๋ main ๋ฉ์๋๋ฅผ ์ฐพ๊ณ ์คํํ๋ค.
์คํํ๋ฉด "static block"์ด ๋จผ์ ์ถ๋ ฅ๋๊ณ , "Hello"๊ฐ ์ถ๋ ฅ๋๋ค.
๋ง์ฝ main ๋ฉ์๋๊ฐ static์ด ์๋๋ผ๋ฉด ์๋๋ Helloํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ธ์คํด์ค ๋ฉ์๋์ด๋ค.
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ ์ค๋ช & ์ธ์คํด์ค ์์ฑ
Java Heap์ JVM์ด ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
Native Memory๋ ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
Java 7๊น์ง๋ ํด๋์ค ์ ๋ณด๊ฐ PermGen์ ์ฌ๋ผ๊ฐ
static ์ ๋ณด๋ Non-Heap์์ญ์ ์ ์ฅ
Java 8๋ถํฐ๋ Metaspace๋ผ๋ ์์ญ์ ์ฌ๋ผ๊ฐ
static ์ ๋ณด๋ Heap์์ญ์ ์ ์ฅ
์์ค์ฝ๋, ํด๋์ค ํ์ผ ์์ฒด๋ ์ ์ ์ด๋ค.
๋์ ์ธ ๊ฒ๋ค์ ์คํ๋๋ฉด์ ์์ฑ๋๋ ๊ฒ๋ค์ ๋งํ๋ค.
ํด๋์ค๊ฐ ์ ์ฅ๋ HDD๋ SSD๋ Ram๋ณด๋ค ์๋๊ฐ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋งค๋ฒ ๋ณด์กฐ ๊ธฐ์ต์ฅ์น์์ ์ฝ์ด๋ค์ด๋ ๊ฑด ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋๋ค.
๋ฐ๋ผ์ ํด๋์ค ์ ๋ณด๋ ์ฒ์ ์ฌ์ฉ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ทธ ์ ๋ณด๋ฅผ ์ฌ๋ฆฌ๊ณ ํ์ํ ๋๋ง๋ค ์ฌ์ฉํ๋ค.
์ด๊ฒ๋ง ๊ธฐ์ตํ์!
staticํ ํ๋๋ ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ํ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๊ณ ์ด๊ธฐํ ๋๋ค.
new์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
์ธ์คํด์ค๋ ๋ ์ด์ ์ฐธ์กฐ๋๋ ๊ฒ์ด ์์ ๋, ๋์ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋๋ค.
์ธ์คํด์ค ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋์ ๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ์ด์ฉํด ์ฌ์ฉ ํ ์ ์๋ค.
ํด๋์ค ๋ฉ์๋๋ ํด๋์ค๋ช .๋ฉ์๋๋ช ()์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๋ฉ์๋ ์์ ์ ์ธ๋ ๋ณ์๋ค์ ๋ฉ์๋๊ฐ ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋์๋ค๊ฐ, ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ์ฌ๋ผ์ง๋ค.
๊ฐ์ฒด์งํฅ 4๊ฐ์ง ํน์ง
Encapsulation(์บก์ํ)
๊ด๋ จ๋ ๊ฒ์ ์ ๋ชจ์์ ๊ฐ์ง๊ณ ์๋ ๊ฒ.
"๋ฐ์ดํฐ", "๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ ํจ์"๋ฅผ ํด๋์ค ์์ ๋๋ ๊ฒ
๋ ๊ตฌ์กฐํ ๋๊ณ , ๋ฉ์๋๊ฐ ์ธ์๋ฅผ ์ทจํ ํ์๊ฐ ์๋ค.
‘this’ํค์๋ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ง์ ์ก์ธ์ค ๊ฐ๋ฅ
์บก์ํ๋ ์ด๋ป๊ฒ ํด๋์ค ์ ๋ณด์ ์ ๊ทผ ํน์ ์์ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ถํ์ ์ ๊ณต
๋ฐ์ดํฐ, ํด๋์ค ์์ ์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ํจ์๋ฅผ ์ ๋ฆฌํ ๊ฒ
Inheritance(์์)
๋ ์์ ๋จ์๋ก ์ชผ๊ฐ์, ์ฌ์ฌ์ฉ ํ ์ ์๋ค.
ํด๋์ค๋ฅผ ‘ํ์ฅ’ํ๋ฉด ์์ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ํ๊ฒ ๋จ.
Abstraction(์ถ์ํ)
๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์จ๊ธฐ๋ ์ผ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ๋ ํ์
์๋์ฐจ์์ ์ด์ ์๋ ์์ง์ด ์ด๋ป๊ฒ ๋์๊ฐ๋ ์ง ์ธ๋ถ์ฌํญ์ ๋ชจ๋ฅธ์ฑ ์ด์ ํ๋ค. ์จ๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ
๊ตฌํ ์ธ๋ถ ๋ด์ฉ์ด ๋ฐ๋์๋๋ผ๋ ์ธํฐํ์ด์ค๋ ๊ทธ๋๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์, ๋ด๋ถ์์ ์ด ๋ฐ๋์ด๋ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ
์ถ์ํ: ์ค์ํ ๊ฒ์ ๋จ๊ธฐ๊ณ , ๋ถํ์ํ ๊ฒ์ ์ ๊ฑฐํ๋ค.
๊ฐ์ฒด๋ ๋๊ฐ ๋ฐ๋ผ๋ณด๋๋์ ๋ฐ๋ผ์ ์ค์ํ ๊ฒ(์ถ์ํ)์ด ๋ฌ๋ผ์ง๋ค.
Polymorphism(๋คํ์ฑ)
ํ๋ก๊ทธ๋จ ์ธ์ด์ ๊ฐ ์์๋ค(์์, ๋ณ์, ์, ๋ฉ์๋ ๋ฑ)์ด ๋ค์ํ ์๋ฃํ์ ์ํ๋ ๊ฒ์ด ํ๊ฐ๋๋ ์ฑ์ง
์๋ฐ์์ ๋คํ์ฑ์ ๋ํ๋ด๋ ๊ฒ์ ์ค๋ฒ๋ผ์ด๋ฉ๊ณผ ์ค๋ฒ๋ก๋ฉ ๊ทธ๋ฆฌ๊ณ ์์๋ฐ์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ณ์ ํ๋ณํ ๋ฑ์ด ์๋ค.
์ข์ ๊ฐ์ฒด vs ๋์ ๊ฐ์ฒด
์์ง๋(cohesion): ๊ด๋ จ๋ ๊ฒ์ ์ ๋ชจ์์ ๊ฐ์ง๊ณ ์์ ์๋ก ์์ง๋๊ฐ ๋๋ค๊ณ ํํํ๋ค.(ex.Math ํด๋์ค).
Math ํด๋์ค์ฒ๋ผ ๊ธฐ๋ฅ๋ค์ด ์ ์ ์ถ ๊ฐ๋ฅํ๋๋ก ํด๋์ค ์ด๋ฆ์ ์ ์ง์ด์ผํ๋ค.
์ข์ ๊ฐ์ฒด๋ ์์ง๋๋ ๋๊ณ ๊ฒฐํฉ๋๋ ๋ฎ๋ค.
์ญํ ๊ณผ ์ฑ ์์ ์ถฉ์คํ๋ฉด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ ํ๋ ฅํ์ฌ ๋์ํ๋ ๊ฐ์ฒด
์ธํ๊ธฐ๊ฐ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ํด์ผํจ.์ฆ, ์์ง๋๊ฐ ๋์๊ฒ ์ข๋ค.
์ปดํจํฐ๋ฅผ ์ด ๋, ๋ถ๊ฐ์ ์ธ ์ฅ๋น๊ฐ ์์ด์ผ๋ง ์๋๋๋ ์ปดํจํฐ๋ ์ข์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ ๊ฒฐํฉ๋๋ ๋ฎ์๊ฒ ์ข๋ค
๊ธฐ๋ฅ์ ์ ๋ชจ์์ ๊ฐ์ง๊ณ ์๊ณ , ๊ฐ์ฒด์ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ผ ํจ.
๋คํ์ฑ๊ณผ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ
์ค๋ฒ๋ก๋ฉ: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ์ฌ๋ฌ ๊ฐ ์๋๋ฐ ๋งค๊ฐ ๋ณ์์ ํ์ ์ด ๋ค๋ฅด๊ฑฐ๋ ๋งค๊ฒ ๋ณ์์ ๊ฐ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ
์ด๋ค ๋ฉ์๋๊ฐ ์คํ๋ ์ง๋ JVM์ด ์คํํ๋ฉด์ ๋์ ์ผ๋ก ๊ฒฐ์ ํ๋ค
๋ง์ฝ ์ ์ ์ถ๋ ฅ์ println(), ๋ฌธ์์ด ์ถ๋ ฅ์ printString()์ด๋ผ๋ฉด ํ์ ๋ณ๋ก ๋ฉ์๋๋ฅผ ๋ค ์์์ผ ํจ. -> ์ด์ฉ ํ๊ธฐ ๋ถํธ
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋๋ ํธ๋ฆฌํ ๊ฒ์ด ์ข๋ค. ๋ฐ๋ผ์, ๋คํ์ฑ์ด ์ค์ํ๋ค.
๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋๋ ์ด๋ ต๊ฒ ๋ง๋ค์ด๋, ์ฌ์ฉ์์ ์ ์ฅ์์ ์ฝ๊ฒ ์ธ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค. ์ด๋ฐ ์๋น์ค ์ ์ ์ด ํ์ํ๋ค.
ํจํค์ง
ํจํค์ง๋ ๊ด๋ จ๋ ํด๋์ค๋ค์ ๊ด๋ฆฌํ๋ ํด๋๋ก ํจํค์ง ๊ตฌ์กฐ๋ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
๊ตฌ์กฐ๋ฅผ ์ก๋๋ค ๋ผ๊ณ ์๊ฐํ์.
์ํคํ ์ฒ๋ฅผ ์ ํ๋ ์ฌ๋์ ์ํคํ ํธ๋ผ๊ณ ํ๋ค.
Package ํจํค์ง๋ช
;
์ด ์ฝ๋๊ฐ ์์ค์ฝ๋ ๊ฐ์ฅ ์์ ๋์์ผ ํ๋ค.
package ์ด๋ฆ ์์ฑ ์ ๋๋ฉ์ธ๋ช ์ ๊ฑฐ๊พธ๋ก ์ ๋ ์ด์ ๋ ๋ค๋ฅธ ๋๋ฉ์ธ๋ช ์ ๋์ผํ ์ด๋ฆ์ ํด๋์ค์์ ์ถฉ๋ ๋ฐฉ์ง
ํจํค์ง๊ฐ ์ ์๋ ํด๋์ค ์ปดํ์ผ
> javac -d ๊ฒฝ๋ก๋ช .java
-d ์ต์ ์ ํจํค์ง์ ํด๋นํ๋ ํด๋๊ฐ ์์ฑ๋๊ณ ๊ทธ ํด๋ ์๋ ํด๋์ค๊ฐ ์์ฑ๋๋๋ก ํ๋ค.
import๋ JVM์๊ฒ ์ด๋ค ํจํค์ง์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํ ๊ฒ์ธ์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.(ํด๋์ค์ ์์น๋ฅผ ๋ช ์)
ํ์ง๋ง import๋ง์ผ๋ก new์ฐ์ฐ์ ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ์๋๋ค.
๋์ผํ ์ด๋ฆ์ ํด๋์ค๊ฐ ์ฌ๋ฌ ํจํค์ง์ ์์ ์ ์์ผ๋ฏ๋ก import๋ก ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ค.
์์
์์ = ์ผ๋ฐํ + ํ์ฅ
๋ถ๋ชจํด๋์ค๋ฅผ ์์๋ฐ๋๋ค๋ ๊ฒ์ ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์์์ด ๋ฌผ๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์์์ ๊ฐํ ๊ฒฐํฉ์ผ๋ก ๋ฐ๋์ ํ์ํ ๋๋ง ์ฌ์ฉํ๋ค.
์ข์ ๊ฐ์ฒด๋ ๋์ ์์ง๋, ๋ฎ์ ๊ฒฐํฉ๋
์๋ฌด๊ฒ๋ ์์๋ฐ์ง ์์ผ๋ฉด ์๋์ผ๋ก java.lang.Object๋ฅผ ์์๋ฐ๋๋ค.
๋ชจ๋ ํด๋์ค๋ Object์ ์์์ด๋ค.
์์ ์ ์ธ ๋ฐฉ๋ฒ
[์ ๊ทผ์ ํ์][abstract | final] class ํด๋์ค๋ช
extends ๋ถ๋ชจํด๋์ค๋ช
{
}
์์ - ๋ถ๋ชจ ํ์ ์ผ๋ก ์์ ์ธ์คํด์ค ์ฐธ์กฐ
๋ถ๋ชจํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ์์ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๋ถ๋ชจํ์ ์ ๋ฉค๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค.
Car car = new Bus();
๋ถ๋ชจ ํด๋์ค Car, ์์ ํด๋์ค Bus
์ฌ์ผ ์ค๋ฅ๊ฐ ๋์ง ์๋๋ค.
์ ์ฐธ์กฐ ํ์ ์ ๋ถ๋ชจ ํ์ ์ผ๋ก ์ฌ์ฉํ ๊น?
์๋ฅผ ๋ค์ด๋ณด์
๋ถ๋ชจ ํด๋์ค Car ๋ฉ์๋ run()
์์ ํด๋์ค Bus ๋ฉ์๋ broadcast()
Bus b1 = new Bus();
b1.run();
B1.broadcast();
์ด๋, ์๋์ฐจ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๋ ค๊ณ ํ ๋
Car c1 = new Bus();
c1.run();
๋ฉ๋ชจ๋ฆฌ์๋ Bus ์ธ์คํด์ค๊ฐ ์์ฑ๋์ง๋ง ์ฐธ์กฐ ๋ณ์ c1์ ์ด์ฉํด ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ run()๋ฟ์ด๋ค.
์ฐธ์กฐ ๋ณ์์ ํ์ ๋ง ๋ณด๊ณ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง ์๊ฒ ๋๋ ์ฝ๋ ๋ถ์ํ ๋ ์ฌ์์ง๋ค.
๋ง์ฝ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฐธ์กฐํ Bus์ธ์คํด์ค์์ Bus๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด
Bus b2 = (Bus)c1;
//c1์ด ์๋ ์ฐธ์กฐํ๋ Bus ์ธ์คํด์ค๋ฅผ Busํ์
์ผ๋ก ๋ณํํด์ b2๊ฐ ์ฐธ์กฐํ๊ฒ ํ๋ผ๋ ๋ง
์์ - ๋คํ์ฑ(๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ)
์ค๋ฒ๋ก๋ฉ: ๋งค๊ฐ๋ณ์์ ํ์ ์ด ๋ค๋ฅด๊ฑฐ๋, ๋งค๊ฐ๋ณ์์ ๊ฐ์๊ฐ ๋ค๋ฅธ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋๋ ๊ฒ
์ค๋ฒ๋ผ์ด๋ฉ: ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค๊ฐ ์ฌ์ ์ ํ๋ ๊ฒ
์์์์ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์ด ์์ ํด๋์ค์๊ฒ ์์๋๋ ๋ฐ, ๊ฐ์ ์ด๋ฆ์ ์ฐ์ง๋ง ๋ค๋ฅธ ๊ตฌํ ๋ฐฉ์์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
๋ค๋ง, ๊ฐ์ ์์ฑ์ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผํจ.
์ฆ, ๋ถ๋ชจ ํด๋์ค์์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ๋๋ฐ ๊ทธ๋ผ์๋ ์ด ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ์๋ํด์ผํ๋์ง ๊ท์น์ด ์ ํด์ ธ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ํด๋์ค์ ํต์ฌ์ ๊ทธ๋๋ก ์๊ณ , ๊ตฌํ๋ฐฉ์์ ๋ชจ์๊ณผ ๋ชจ์ต์ ๋ฌ๋ผ์ง๋ ๊ฒ์ด๋ค.
์ด๋ฆ ๊ทธ๋๋ก over+ ride = ์์์ ๋ณด๋ ์๋์์ ๋ณด๋ ์์ ํ ๊ฒน์ณ์ ํ๋์ฒ๋ผ ๋ณด์ด๋ ๊ฒ
๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋์ ๋ฆฌํด ํ์ , ๋งค๊ฐ๋ณ์, ๋ฉ์๋ ์ด๋ฆ์ด ๋ชจ๋ ๊ฐ๋ค. ๋ถ๋ชจ ํด๋์ค์ ๋์์ ์์ ๋ฐ๋ ์์ ํด๋์ค์์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ฉ์๋๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋๋ฉด ๋ฌด์กฐ๊ฑด ์์์ ๋ฉ์๋๊ฐ ์คํ๋๋ค.
๋ถ๋ชจ ํด๋์ค Car๋ public void run()๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์์ ํด๋์ค Bus๋ public void run()๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด?
Car c = new Bus();
c.run();
์ ๊ฒฐ๊ณผ๋ Bus์ run()๋ฉ์๋๊ฐ ์คํ๋๋ค.
ํ์ ์ธ์คํด์ค๋ฅผ ์กฐ์ ํ์ ์ ์ฐธ์กฐ ๋ณ์๋ก ์ฐธ์กฐํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ๊ทธ ๋ฐ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์๋ฅผ๋ค์ด,
๋ชจ๋ ์ด์ธต๋ฒ์ค๋ ์๋์ฐจ๋ค ๋ง๋ ํํ
๋ชจ๋ ์๋์ฐจ๋ ์ด์ธต๋ฒ์ค๋ค ํ๋ฆฐ ํํ
์์ - ํ๋, ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์ ์ฃผ์์
ํ๋๋ ํ์ ์ ๋ฐ๋ผ๊ฐ๊ณ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ์์์ ๋ฉ์๋๊ฐ ์คํ๋๋ค.
์ ์๊ฐํด๋ณด๋ฉด
ํ๋๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด์ ์์์ ๊ฐ์ ์ฌ์ฉํ๋ค๋ฉด ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ง๋ ์ฌ๋์ด ์์ํ์ง ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด ์๋ช ํ๋ค.
๋ฐ๋ผ์ ํ๋๋ ๋ถ๋ชจํ์ ์ ๋ฐ๋ผ๊ฐ๋๊ฒ์ด๋ค.
์ด๊ฒ๋ง ๊ธฐ์ตํ์!
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์ ๋ฌด์กฐ๊ฑด ์์์ ๊ฒ์ด ์คํ๋๋ค.
์ ๋ณด ์๋(information hiding) : ํ๋๋ ์๋ํ๊ณ , ํ๋๋ ๋ฉ์๋๋ฅผ ํตํด์๋ง ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์ ๊ทผ ์ง์ ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํ๋ค.
๊ฐ์ฒด ์งํฅ ์ธ์ด ์ค๊ณ ์ ์ ๋ณด ์๋์ ๋ฐ๋ฅด์.
ํ๋๋ฅผ ์ง์ ์ ๊ทผํ๋ ์ฝ๋๋ ์ง์ํ์. ๋ฉ์๋๋ก ์ ๊ทผ์ ์งํฅํ์
์์ - ํ๋, ํ๋กํผํฐ, setter, getter ๊ตฌ๋ถ
ํ๋๋ฅผ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ ์ ๋ณด์๋ ๊ด์ ์์ ์ข์ง ์์ผ๋ฏ๋ก ์ธ๋ถ์ ๊ทผ์ ์ ํํ๋ private๋ก ์ง์ ํ๋ค.
ํ๋ ์ ๊ทผ์ ์ด์๋ฅผ private๋ก ์ง์ ํ๋ฉด ์ง์ ์ ๊ทผํ ์ ์๊ณ getter์ setter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์๋ค.
ํ๋์ ๊ฐ์ ์์ ํ๊ณ ์ป๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค. setter & getter
Mac ๊ธฐ์ค: cmd + n ์ผ๋ก getter, setter์์ฑ
๋ฉ์๋์์ ์ ์ธ๋ ์ง์ญ ๋ณ์์ธ์ง or ํ๋์ธ์ง ์ฐฉ๊ฐ ํ ์ ์์ผ๋ฏ๋ก ์ธ์คํด์ค ํ๋ ์ฌ์ฉ ์ this.price๋ก ์ ์ด์ฃผ์.
this๋ ๋ด ์์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ์์ฝ์ด์ด๋ค.
this๋ static์์๋ ์ฌ์ฉํ ์ ์๋ค.
public class Book {
private int price; //ํ๋ price
public int getPrice() {
return this.price;
}
public void setPrice(int price) { //์ง์ญ๋ณ์ price
this.price = price;
}
}
----------------------------------------------------------------
public class BookExam{
public static void main(String[] args) {
Book b1 = new Book();
b1.setPrice(500);
System.out.println(b1.getPrice());
}
}
price: ์ง์ญ๋ณ์
this.price: ์ธ์คํด์ค ๋ณ์
๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ง์ญ๋ณ์ price๋ก this.price๋ฅผ ์ด๊ธฐํํ๋ค.
์ฐธ๊ณ
Springํ๋ ์์ํฌ์์ ๋์ค๋ ํํ์ผ๋ก Setter, getter๋ฅผ ํ๋กํผํฐ๋ผ๊ณ ๋ ํ๋ค.
setPrice(), getPrice()๋ฅผ priceํ๋กํผํฐ๋ผ๊ณ ํ๋ค.
priceํ๋: ํด๋์ค๊ฐ ๊ฐ์ง๋๊ฒ
priceํ๋กํผํฐ: getter, setter๋ฅผ ๋งํ๋ ๊ฒ
getTitle(), setTitle() : Title ํ๋กํผํฐ
getName(), setName() : Name ํ๋กํผํฐ
Object ์ค๋ฒ๋ผ์ด๋ฉ์ ์ํ toString(), equals(), hashCode() ๋ฉ์๋
'๐ผ๋ฐฑ์ค๋ > Java ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฐ์ด 1/2 (0) | 2023.08.22 |
---|---|
๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ 3/3 (0) | 2023.08.21 |
๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ 1/3 (0) | 2023.08.20 |
์๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ (0) | 2023.08.20 |
05_02 ArrayLoop (0) | 2023.07.05 |