mufxxkingsibalgyeongjangsoceity
?ukw
foorp
public class Time
{
private int hour;
private int minute;
private floast seconds;
public void setHour(int h){
if(h<0 || h>23) return;
hour = h;
}
}
private์ผ๋ก hour์ ์ ์ธํจ์ผ๋ก์
๋ณ์ ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํ๊ณ , ๋งค์๋๋ฅผ ํตํด์๋ง ๋ณ๊ฒฝ๊ฐ๋ฅํ๊ฒ ํจ.
๋ฐ๋ผ์ class์ property๋ค์ ์กฐ๊ฑด๋ค์ ๋งค์๋๋ฅผ ํตํด์ ๋ฏธ๋ฆฌ ์ ํ๊ฐ๋ฅํจ!!
๋ณ์์ ์ข ๋ฅ | ์ ์ธ์์น | ์์ฑ์๊ธฐ |
---|---|---|
class variable | class block | ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ |
instance variable | class block | instance๊ฐ ์์ฑ๋์์ ๋ |
local variable | class ์์ญ ์ด์ธ์ ์์ญ | ๋ณ์ ์ ์ธ๋ฌธ์ด ์ํ๋์์ ๋ |
- ํ class์ class variable์ ๋ชจ๋ ์ธ์คํด์ค์์ ๊ณตํต๋ ์ ์ฅ๊ณต๊ฐ์ ๊ณต์ ํ๋ค
- instance๋ณ์๋ instance ์์ฑ ํ์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง,
class variable์ ๊ฒฝ์ฐ class๋ช .class_variable๋ก ์ธ์ ๋ ์ง ํธ์ถ ํ ์ ์๋ค.
C์ธ์ ํจ์ ์ ์ธ๊ณผ ๋์ผํจ
๋ค๋ง, class์์์ class ๋ณ์๋ค์ ๋์ฒด๋ก ์ด์ฉํด์ ๊ด๊ณ์ค์ ์ ์ฉ์ํ ํจ์
- ๋งค์๋ค ํธ์ถ ์ ๋งค๊ฐ๋ณ์
๊ธฐ๋ณธํ ๋งค๊ฐ๋ณ์ : ๊ฐ์ ์ฝ์ ์๋ง ์์
์ฐธ์กฐํ ๋งค๊ฐ๋ณ์ : ์ฃผ์๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์, ๊ฐ์ ์ฝ๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅ
๊ธฐ๋ณธํ ๋งค๊ฐ๋ณ์
static void change(int x) {
x = 1000;
System.out.println("change() : x = " + x);
}
์ฐธ์กฐํ ๋งค๊ฐ๋ณ์
static void change(Data2 d) {
d.x = 1000;
System.out.println("change() : x = " + d.x);
}
- ๊ทธ๋ฅ ๋ชจ๋ ๊ณผ์ ์์ ๋ฐํํ ํ์ ๊ณผ returnํ์ ์ ๊ฐ์์ผ๋จ
- ๋งค์๋ ๋ฐํ ํ์ ๊ณผ ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธํ, ์ฐธ์กฐํ ๋ชจ๋ ๊ฐ๋ฅํจ
- static ๋งค์๋์ด๋ฆ{} ์ผ๋ก ์ ์ธํ ์ ์๋ค.
- class varaible๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก class method๋ ์ธ์คํด์ค ์์ฑ ์์ด
- ํด๋์ค๋ช .๋งค์๋๋ช ์ผ๋ก ํธ์ถ ๊ฐ๋ฅํ๋ค.
๋์ฒด๋ก ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋งค์๋๋ ์ธ์คํด์ค ๋งค์๋๋ก
์ธ์คํด์ค ๋ณ์ ์ฌ์ฉ์ด ์๋ ๋งค์๋๋ (static)ํด๋์ค ๋งค์๋๋ก ์ ์ธํ๋ค.
class MyMath2 {
long a, b;
//using instacne variable, method is declared in instance method
long add() { return a + b; }
long subtract() { return a - b; }
long multiply() { return a * b; }
double divide() { return a / b; }
//using local varaible, method is declared in class method
//as you see, the same variable name doesn't matter when it is local variable
static long add(long a, long b) { return a + b; }
static long subtract(long a, long b) { return a - b; }
static long multiply(long a, long b) { return a * b; }
static double divide(long a, long b) { return a / (double)b; }
}
class Ex6_9 {
public static void main(String args[]) {
//using class method
System.out.println(MyMath2.add(200L, 100L));
System.out.println(MyMath2.subtract(200L, 100L));
System.out.println(MyMath2.multiply(200L, 100L));
System.out.println(MyMath2.divide(200L, 100L));
//make instance
MyMath2 mm = new MyMath2();
mm.a = 200L;
mm.b = 100L;
System.out.println(mm.add());
System.out.println(mm.subtract());
System.out.println(mm.multiply());
System.out.println(mm.divide());
}
}
- ๋งค์๋์์ ์ด๋ฆ์ ๊ฐ๊ณ , ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋๋ ํ์ ์ด ๋ค๋ฅด๊ฒ ์ ์ํ๋ ๊ฒ
์กฐ๊ฑด1. ๋งค์๋์ ์ด๋ฆ์ด ๊ฐ์์ผ ํ๋ค.
์กฐ๊ฑด2. ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋๋ ํ์
์ด ๋ฌ๋ผ์ผํ๋ค.
int add(int a, int b) {return a+b;}
int add(int x, int y) {return x+y;}
์ค๋ฒ๋ก๋ฉ ์๋
int add(int a, int b) {return a+b;}
long add(int a, int b) {return (long)(a+b);}
์ค๋ฒ๋ก๋ฉ ์๋
long add(int a, long b) {return a+b;}
long add(long a, int b) {return a+b;}
์ค๋ฒ๋ก๋ฉ ๋ง์
-> ๋ค์ด์ค๋ ๋งค๊ฐ๋ณ์ ํ์
์ ๋ฐ๋ผ์ ๋งค์๋๊ฐ ์์์ ํธ์ถ๋จ
- ์์ฑ์์ ํ์์
- ์์ฑ์์ ์ด๋ฆ์ ํด๋์ค์ ์ด๋ฆ๊ณผ ๊ฐ์์ผ ํ๋ค.
- ์์ฑ์๋ ๋ฆฌํด ๊ฐ์ด ์๋ค.
- ์์ฑ์๋ ์ค๋ฒ๋ก๋ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฐ์ฐ์ new๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด์ง, ์์ฑ์๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ค.
์ง๋ ธ๋ค...
class Data_1 {
int value;
}
class Data_2 {
int value;
Data_2(int x) { //๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์
value = x;
}
}
class Ex6_11 {
public static void main(String[] args) {
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2(); // compile error
}
}
- ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ์์ฑ์๋ฅผ ์์ฑํ์ง ์์ ์ด์ ๋ compiler์์ ์๋์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ถ๊ฐํด์ฃผ๊ธฐ ๋๋ฌธ์ด์๋ค. (์์ฑ์๊ฐ ์์ฑ๋์ด ์๋ค๋ฉด, ๊ธฐ๋ณธ์์ฑ์๋ ๋ง๋ค์ด์ง์ง ์์)
- ์๋ฅผ ๋ค์ด,
class Data_1 { int value; } ๊ฐ์ ๊ฒฝ์ฐ compileํ์ผ์๋ ์๋ง class Data_1 { Data_1() {} //added int value; } ๋ก ์์ฑ๋์์ ๊ฒ์ด๋ค.
Data_2 d2 = new Data_2(); // compile error
-> ์ด๋ Data_2 class์ ์์ฑ์๋ฅผ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋ก ์ ์ํ๊ธฐ ๋๋ฌธ์ ์ณ๋ฐ๋ฅธ ์์ฑ์ ํํ๋ก ํธ์ถ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
class Car {
String color;
String gearType;
int door;
Car() {}
Car(String c, String g, int d) {
color = c;
gearType = g;
door = d;
}
}
- Car c2 = new Car("white", "auto", 4);
๊ฐ ์คํ๋๋ ์์
- c2๋ผ๋ car class ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์๋ ์ฐธ์กฐํ ๋ณ์ ์ ์ธ
- new Car๋ก Car instance ์์ฑ
- ์ด๋, ๋งค๊ฐ๋ณ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธํ ์์ฑ์๊ฐ ์๋๋ผ ์ค๋ฒ๋ก๋ฉ๋ ๋งค๊ฐ๋ณ์ 3๊ฐ์ง๋ฆฌ ์์ฑ์๋ก ์ธ์คํด์ค ์ด๊ธฐํ
1. ์์ฑ์ ๋ด์์ ๋ค๋ฅธ ์์ฑ์ ํธ์ถ ๊ฐ๋ฅ
2. ๋จ!!!! ๋ค๋ฅธ ์์ฑ์ ํธ์ถ์ ๋ฐ๋์ ์ฒซ์ค์์๋ง this๋ก ๊ฐ๋ฅ
class Car2 {
String color; //
String gearType; // ำฑ - auto( ฺต ), manual( )
int door; //
Car2() {
this("white", "auto", 4);
}
Car2(String color) {
this(color, "auto", 4);
}
Car2(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
- ์์ฑ์ ๋ด์์ ์์ฑ์๋ฅผ ์ ์ธํ๋ ๊ณผ์ ์ ์ต์ ์ ๋ถ์ด์ง ์์ ์์ ์๋์ฐจ๋ถํฐ ์ต์ ์ ์ ์ฐจ ์ถ๊ฐํ๋ ๊ณผ์ ์ผ๋ก ์๊ฐํด๋ ๋๋ค.
- ์์ฑ์ ๋ด์์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์ ์ฝ๋์ ์์ ์ด ์ ์ฝ๋๊ณ , ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
this๋ ์ฐธ์กฐ๋ณ์๋ก ์๊ธฐ์์ ์ ๊ฐ๋ฆฌํจ๋ค
C์ธ์ด์ ํฌ์ธํฐ == JAVA์ ์ฐธ์กฐ๋ณ์
1. ์๋์ ๊ฐ์ด instance varaible๊ณผ ์์ฑ์์ local varible์ ๋ณ์๋ช
์ด ๋ค๋ฅด๋ฉฐ ์๋ฌด ๋ฌธ์ ๊ฐ ์์ผ๋
Car(String c, String g, int d){
color = c;
gearType = g;
door = d;
}
2. instance variable๊ณผ local variable์ ๋ณ์๋ช
์ด ๊ฐ์ผ๋ฉด, this๋ฅผ ์ด์ฉํด์ intance variable๋ก ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
Car(String color, String gear, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
//์ฝ๋์ด ๊ฐ๋
์ฑ์์ this๋ณ์๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ์ข์ ๋ฏ ํ๋ค.
- ๋งด๋ฒ๋ณ์(ํด๋์ค ๋ณ์, ์ธ์คํด์ค ๋ณ์)๋ ์ด๊ธฐํ๊ฐ ์๋์ผ๋ก ๋จ(type default ๊ฐ์ผ๋ก)
- ํด๋์ค ๋ด ๋งค์๋์ ์ง์ญ๋ณ์์ ๊ฒฝ์ฐ ์๋ ์ด๊ธฐํ ์๋จ!!
๋ฐ๋ผ์, ์ง์ญ๋ณ์๋ ์ด๊ธฐํ ์งํ ํ์!!
๋งด๋ฒ๋ณ์์ ์ด๊ธฐํ์ ํด๋์ค ๋ด ์ด๊ธฐํ ์์
1. ํด๋์ค ๋ณ์(cv) ์ด๊ธฐํ -> ์ธ์คํด์ค ๋ณ์(iv) ์ด๊ธฐํ
2. ์๋ ์ด๊ธฐํ -> ๋ช ์์ ์ด๊ธฐํ(๊ฐ๋จ) -> ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ -> ์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ -> ์์ฑ์
<๋ช ์์ ์ด๊ธฐํ>
๋ณ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ ๊ฒint door = 4; Engine e = ne Engine();
<Ex 1>
class Ex6_14 {
static {
System.out.println("static { }");
}
{
System.out.println("{ }");
}
public Ex6_14() {
System.out.println("์์ฑ์");
}
public static void main(String args[]) {
System.out.println("Ex6_14 bt = new Ex6_14(); ");
Ex6_14 bt = new Ex6_14();
System.out.println("Ex6_14 bt2 = new Ex6_14(); ");
Ex6_14 bt2 = new Ex6_14();
}
}
- ์์
- ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ ์ด๊ธฐํ
- println ์คํ
- new์์ ์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ ์ด๊ธฐํ
- ์์ฑ์ ํธ์ถ์ ์์ฑ์ ์ด๊ธฐํ
- println ์คํ
- new์์ ์ธ์คํด์ค ์ด๊ธฐํ ๋ธ๋ญ ์ด๊ธฐํ
- ์์ฑ์ ํธ์ถ์ ์์ฑ์ ์ด๊ธฐํ
<Ex 2>
class Ex6_15 {
static int[] arr = new int[10];
static {
for(int i=0;i<arr.length;i++) {
arr[i] = (int)(Math.random()*10) + 1;
}
}
public static void main(String args[]) {
for(int i=0; i<arr.length;i++)
System.out.println("arr["+i+"] :" + arr[i]);
}
}
๋ฐฐ์ด์ด๋ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ด๊ธฐํ์ ๊ฒฝ์ฐ์๋ ๋ช
์์ ์ด๊ธฐํ๋ง์ผ๋ก ๊ฐ๋ฅํ์ง ์๋ค.
๋ฐ๋ผ์ ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญ์ ์ด์ฉํ์ฌ ์ด๊ธฐํ ํ๋ค.
- ์ ๋ฆฌ:
๋ช ์์ ์ด๊ธฐํ ์ด์์ ์ค์ ์ด main์คํ์ ์ ์ธํ ๋์ด์ผ ํ๋ค๋ฉด ํด๋์ค ์ด๊ธฐํ ๋ธ๋ญstatic{ //class reset block }
์ ํ์ฉํด์ ์ด๊ธฐํ ํด์ค๋ค.
๊ธ ์ ๋ดค์ต๋๋ค, ๊ฐ์ฌํฉ๋๋ค.