- ๊ฐ์์ธ๊ณ = ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ธ์คํด์ค = heap ์์ญ ์์ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ
์ง์ญ์์ ์ ์ฅ๋๋ ๊ณณ์ด ์๊ณ ๋์ ์ผ๋ก ์ ์ฅ๋๋ ๊ณณ์ด ์๋๋ฐ,
malloc()๋ c์ธ์ด์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ๋ ํจ์๊ณ Java๋ new๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.
๊ทธ๋์ ์ด๋ฐ new๋ผ๋ ์ ๋ heap์ ์ ์ฅ์ด๋๋ค.
๊ทธ๊ฒ ์๋ ์ง์ญ๋ณ์๋ STACK์ ์ ์ฅ๋๋ค.
intํ์ด๋ doubleํ ๊ฐ์ ๊ธฐ๋ณธํ(primitive type)์ด ์๋๋ผ, ํด๋์ค ํ์ ์ด๋ค.
int, boolean ์ด๋ฐ ๊ฐ๊ณผ๋ ๋ค๋ฅด๊ฒ String๋ง ๋๋ฌธ์๋ก ์์ํ๋ค. ์์ผ๊น?
ํด๋์ค ํ์
์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฒดํ ํ ๊ฒ์ด๊ณ ๊ธฐ๋ณธํ์ด ์๋ ์ฃผ์๊ฐ์ ๋ถ๋ฌ์ค๋ ์ฐธ์กฐํ์ด๋ค.
public class Main {
public static void main(String[] args) {
String str = new String("์๋
ํ์ธ์"); // ์ข์ง ์์ ์ฝ๋
System.out.println(str);
}
}
์ด๋ ๊ฒ ์ฌ์ฉํด๋ ์๋ฌ๋ ์๋๋ค. ํ์ง๋ง, String๋ง ์์ธ๋ก ์ด๋ ๊ฒ ํ์ง ์์๋ ๋๊ฒ๋ Java์์ ์ค๊ณ๋ฅผ ํด๋จ๋ค.
์คํ๋ ค String์ new๋ก ์ง์ ํ์ ๋, ํจ์จ์ด ๋ ๋ฎ์์ง๋ค.
๊ทธ๋์ classํ์
์ด๊ธด ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ธ์คํด์คํ ํ์ง ์๋๋ค.
newํ์ ๋ ์๋ฌด ๊ฐ๋ ์ค์ ๋์ง ์์ ๊ท์ฐฎ์. ์ค์ด ๊ธธ์ด์ง๋ค.
์ด๋ด๋, ์์ฑ์๋ฅผ class ์์๋ค๊ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ main์๋ค๊ฐ ๋ฃ์ด์ค๋ค.
์๋๋ผ๋ฉด ๋ณ์์๋ค๊ฐ ์ด๊ธฐ๊ฐ์ ๋ฃ์ด์ค์ผ ์๋ฌ๊ฐ ์๋๋๋ฐ,
์์ฑ์๋ ์ด๊ธฐ๊ฐ์ ์๋์ผ๋ก ์ค์ ํด์ค์ ์ด๊ธฐ๊ฐ์ ๋ฃ์ง ์์๋ ์๋ฌ๊ฐ ๋์ง ์๋๋ค.
//์์
class Drink {
private int drinkNum;
private String name;
private int price;
// Drink ์์ฑ์
public Drink(int drinkNum, String name, int price) {
setDrinkNum(drinkNum);
setName(name);
setPrice(price);
}
- int, short, long: 0
- char: \u0000
- boolean: false
- int[]: null
- String: null
๋ฐฐ์ด๊ณผ String์ ์ฐธ์กฐํ์ ์ด์ฌ์ null๊ฐ์ด ๋ค์ด๊ฐ๋ค.
public class Hero {
String name;
int hp;
Sword sword;
//๊ธฐ๋ณธ ์์ฑ์
Hero() {
this.hp = 100;
this.name = "๋ฐ๋ก๋ก";
}
//์์ฑ์ ์ค๋ฒ๋ก๋
Hero(String name) {
this.hp = 100;
this.name = name;
}
}
ํ๋ผ๋ฏธํฐ ์์ ์๋ฌด๊ฒ๋ ์๋ ๊ฒ์ด ๊ธฐ๋ณธ ์์ฑ์์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์์ฑ์๋ก ์ด๋ฆ์ ๊ผญ ๋ฃ๊ฒ ์ง์ ํด๋จ๋๋ฐ ์ฌ์ฉ์๊ฐ ์ด๋ฆ์ ๋์ค์ ์ ํ๊ณ ์ถ๋ค๊ณ ํ๋ค๋ฉด ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์ถ๊ฐํด์ ๊ตณ์ด ์ด๋ฆ์ ๋ฐ๋ก ์ง์ ํ์ง ์๊ฒ๋ ๋ํ๋ผ ์ ์๋ค.
๊ทธ๋์ ๋ฃ์ด๋ ๊ทธ๋ง ์๋ฃ์ด๋ ๊ทธ๋ง์ผ๋ก ์ง์ ํ ์ ์๋ค!
= ๋ฐ๋์ ์ ์.
์์ฑ์๋ฅผ 1๊ฐ๋ ์์ฑํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณธ๋ค.
์์ฑ์๋ ๋ฉ์๋์ ๋น์ทํ๊ฒ ์๊ฒผ์ง๋ง ๋ฉ์๋๋ ์๋๋ค.
๊ทธ๋์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฑฐ์๋ ๋ค๋ฅด๊ฒ ํด์ผ ํ๋ค.
โ๏ธ this();
: ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ
Hero(String name) {
this(); // ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ
this.name = name; // ์์ ์ ์๋ ๋ฉค๋ฒ๋ณ์ name์ด๋ ํ๋ผ๋ฏธํฐ์ name๊ณผ ์ฐ๊ฒฐ์ง๊ธฐ
}
this.name = name;
์ฌ๊ธฐ์ this๋ฅผ ๋นผ๋ฒ๋ฆฌ๋ฉด name = name์ผ๋ก ๋ฌด์๋ฏธํ ์ฝ๋๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
๊ทธ๋์ ๋ด๊ป์ง ๋๊ป์ง์ธ์ง๋ฅผ ์์์ผ ๋๋๊น ๋ด ์ด๋ฆ์ด๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ด๋ฆ์ ์ฐ๊ฒฐ์ง์ด์ผ ํ๋ค.
this();
๋ด ์์ฑ์๋ฅผ ํธ์ถํ๋ผ๋ ์๋ฏธ์ด๋ค.
์์ฑ์๋ ์์ฑ์๋ผ๋ฆฌ ํธ์ถ๊ฐ๋ฅํ๋ค. ๋ฉ์๋ ๋ด์์ ์์ฑ์ ํธ์ถ์ ๋์ง ์๋๋ค.
public class Hero {
String name;
int hp;
int money;
}
public class Hero {
String name;
int hp;
static int MONEY; // Hero๊ฐ์ฒด๋ค์๊ฒ ๊ณต์
}
public class Main {
public static void main(String[] args) {
Hero hero1 = new Hero();
Hero hero2 = new Hero();
Hero. MONEY = 100;
System.out.println(Hero.MONEY); // 100
System.out.println(hero1.MONEY); // 100
hero1.MONEY = 300;
System.out.println(hero2.MONEY); // 300
// hero1.MONEY = hero2.MONEY: ํ์ชฝ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ์ชฝ๋ ๋ณ๊ฒฝ๋์ด ๋ฒ๋ฆฐ๋ค.
}
}
MONEY๋ ๊ณต์ ์์์ด๊ธฐ ๋๋ฌธ์ hero1์ ์ง์ ํด์ค๋ค๊ณ ํ๋๋ผ๋ ๋ชจ๋ hero๋ค์๊ฒ ์ํฅ์ด ๊ฐ๋ค.
Hero ์์ฑ์์์ MONEY๋ฅผ ์จ๋ดค์ ์๋ฏธ๊ฐ ์์ง๋ง, ๊ทธ๋๋ hero๋ค์๊ฒ ๊ณต์ ํ MONEY๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์์ ์จ๋์ ๊ฒ.
static์ ์ง์ ํ ๋ณ์๋ฅผ ์ธ ๋, ์์ ํด๋์ค ์ด๋ฆ์ ์์ ๋ถ์ฌ์ค๋ค.
public class Main {
public static void main(String[] args) {
//์์
์ 1๊ฐ๋ ์์ฑํ์ง ์์ ์ํฉ
Hero.MONEY = 100;
System.out.println(Hero.MONEY);
}
}
static์ ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅ์ด ๋์ด์๋ค. ์์๋ ๋งํ๋ฏ์ด Hero๋ผ๋ ๊ฐ์ฒด์ ๋ฌด๊ดํ๋ค. ๊ณต์ ์์์ด๊ธฐ ๋๋ฌธ์!!
Hero๊ฐ ์๋ ์๋ ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ณธ๋ค.
public class Hero {
String name;
int hp;
static int MONEY;
Sword sword;
static void setRandomMoney() {
Hero.MONEY = (int)(Math.random() * 1000) + 1;
//
}
...
(main)
Hero.money = 100; // ์์ ํด๋์ค ์ด๋ฆ ๊ผญ!
public class Hero {
String name;
int hp;
static int money;
Sword sword;
static void setRandomMoney() {
Hero.money = (int)(Math.random() * 1000) + 1;
System.out.println(this.name + "์ ์์ง๊ธ์ ์ด๊ธฐํํ์ต๋๋ค.") // ์๋ฌ. ์ผ๋ฐ๋ณ์์ ์ ๊ทผํ๋ ๊ฒ์ ์๋ชป๋ ๊ฒ. ์ ์ ์ ์ ์ ๋ง!!!
}
}
โ setter / getter ์ฌ๋งํด์๋ staic โ
static void setname(String name) { this.name = name; }
์ด๋ฆ์ ๋ฐ๊ฟ๋ ค๊ณ ์ด๋ฐ์์ผ๋ก ๋๋ ๊ฒ์ ์๋๋ค.
์๋, static์ ํด๋์ค์ ๊ด๊ณ๊ฐ ์๋ค. ๊ทธ๋ฅ ๋ค๋ฅธ ์ ๋ค๋ก ๋ด์ผ๋๋ค.
static ๋ถ์ ์ ๋ค์ ๊ทธ๋ฅ ์ธ ๊ณณ์ด ์์ด์ ์์๋ค๊ฐ ์ด๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ทธ๋์ ์ด๋ฆ์ ๋ฐ๊พผ๋ค๋์ง ๊ฐ๊ณ ์จ๋ค๋์ง์ ๊ธฐ๋ฅ์์๋ static์ด ์์ด์ผ ํ๋ค.
์์ ๊ณตํต์ ์ธ ๊ฒ, ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ง ์์ ๋ static์ ์ฌ์ฉํ๋ค.