๐ ์๋ฐ์ ์ ์์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๊ฐ์ฒด์งํฅ
- ์ฝ๋ ์ฌ์ฌ์ฉ
- ์ ์ง๋ณด์ ์ฉ์ด
- ์ ๋ขฐ์ฑ ๋์ ํ๋ก๊ทธ๋๋ฐ
ํด๋์ค์ ๊ฐ์ฒด
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ํด๋์ ์ผ์ข
์ ์ค๊ณ๋๋ค.
๋๋์ฒด ํด๋์ค๋ฅผ ์ ๋ง๋๋๋ฐ?
ํด๋์ค๋ ์ผ์ข ์ ๋ถํ์ด ์๋๊น? ์ด๋ฅผํ ๋ฉด ๊ฑฐ๋ํ ์ฐ์ฃผ์ ์ ๋ง๋ ๋ค๊ณ ํ์.
์๋ง๊ฐ์ง์ ๋ถํ์ด ํ์ํ๋ค. ๊ทธ๋ ๋ค๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ ๋ง์ ๋ถํ๋ค ์ง์ ๋ง๋ค์ด์ ์ฐ์ง ์๋๋ค.
์ด๋ฏธ ๋๊ตฐ๊ฐ ๋ง๋ค์ด๋์ ๋ถํ์ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ์ฐ๋ ๊ฒ์ด (ํฉ๋ฆฌ์ ์ด๋ ๊ฒ๋ ์์ด)๋น์ฐํ ์ ํ์ด๋ค. ๋ฌผ๋ก ์๋ ๋ถํ์ ์ง์ ๋ง๋ค ์๋ ์๋ค. ์ฌ์ฉ์ ์ ์ ํ์ ์ฒ๋ผ.
์๋ฌดํผ.
ํด๋์ค๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ํด๋์ค์ ์ธ์คํด์คํ๋ผ๊ณ ํ๋ค.
๋ง๋ค์ด์ง ํด๋์ค๋ฅผ ์ฐ๋ฆฌ๋ ๊ฐ์ฒด(=์ธ์คํด์ค)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ฐ์ฒด์ ๊ตฌ์ฑ์์
์์ฑproperty๊ณผ ๊ธฐ๋ฅfunction์ด ์๋ค.
property - member variable
function - method
์ฐธ ์ฝ๊ณ ์ง๋ถํ ๊ฐ์ฒด์งํฅ ์์
package com.javaex.ch6;
public class TvProps {
//๊ฐ์ฒด ํ๋กํผํฐ
private boolean power;
private int channel;
public TvProps() {
this.channel = 1;
this.power = false;
}
void power() {
this.power = !power;
}
void channelUp() {
this.channel = ++channel;
}
void channelDown() {
this.channel = --channel;
}
public int getChannel() {
return channel;
}
}
package com.javaex.ch6;
public class Tv {
public static void main(String[] args) {
TvProps tv = new TvProps();
TvProps tv2 = new TvProps();
tv.channelUp(); //2
tv.channelUp(); //3
tv.channelUp(); //4
tv2.channelUp(); //2
System.out.println("tv.channel : " + tv.getChannel());
System.out.println("tv2.channel : " + tv2.getChannel());
tv.channelDown();
System.out.println("tv.channel : " + tv.getChannel());
/* ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๋ค๋ฅด๋ค. */
System.out.println("==========before========");
System.out.println("tv : " + tv);
System.out.println("tv2: " + tv2);
/*tv2์ tv๋ฅผ ์ฃผ์
ํ๋ค.*/
tv2 = tv;
/* ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๊ฐ๋ค. */
System.out.println("==========After========");
System.out.println("tv : " + tv);
System.out.println("tv2: " + tv2);
}
}
์ฐธ๊ณ :์๋ฐ์ ์ ์
ํด๋์ค
ํด๋์ค๋ ๋ฐ์ดํฐ์ ํจ์(java์์๋ method)์ ๊ฒฐํฉ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ์ฅํํ์ ๋ฐ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ณ์
ํ์ด์ ํ๋์ ๋ฐ์ดํฐ๋ง์ ์ ์ฅํด๋ ์ ์๋ ๊ณต๊ฐ์ด ์์๋ค.
๋ฐฐ์ด
1์ ๋ง์กฑํ์ง ๋ชปํ๋ ํ์์ค๋ฐ ์ธ๊ฐ์ด ๊ฐ์ ์ข ๋ฅ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ
ํ๋์ ์งํฉ์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ ์ ์ฅํํ๋ฅผ ๋ง๋ค์๋ค.
๊ตฌ์กฐ์ฒดstructure
์๋ก ๊ด๋ จ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ข ๋ฅ์ ๊ด๊ณ์์ด ์งํฉ์ฒ๋ผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋์ค๊ฐ ์์๋ค
๊ตฌ์กฐ์ฒด์ ํจ์๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ์ ๋ํ ๊ฒ์ด ํด๋์ค๋ค.
์ฌ์ฉ์ ์ ์ ํ์ (user - defined type) ํด๋์ค
์์์ ๋งํ๋ฏ์ด ํ์ํ ๋ถํ์ด ๋ง๋ ํ์ง ์๋ค๋ฉด, ์ง์ ๋ง๋ค์ด ์ฐ๋ฉด ๋๋ค.
์ฌ์ฉ์ ์ ์ ํ์ ์ ์กฐํฉ(๋๋ ์ด์ฉ)ํด์ ๋๋ค๋ฅธ ์ฌ์ฉ์์ ์ํ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ผ ์๋ ์๋ค.
์ฝ๊ฒ ๋งํ์๋ฉด.
- ์์ด์ธ๋งจ, ์บกํด ์๋ฉ๋ฆฌ์นด, ๋ธ๋ ํ์, ํํฌ, ํ ๋ฅด ํด๋์ค๋ฅผ ์ ์ํ๋ค.
- 1์์ ์ ์ํ ๊ฐ๊ฐ์ ์์ด์ธ๋งจ, ์บกํด, ๋ธ๋ํ์, ํํฌ, ํ ๋ฅด ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ์ด๋ฒค์ ธ์ค๋ผ๋ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
๋ณ์์ ๋ฉ์๋
๋ณ์๋ ์ธ ์ข ๋ฅ๊ฐ ์๋ค.
- ํด๋์ค ๋ณ์Class Variable
- Instance Variable(=๋ฉค๋ฒ๋ณ์)
- ์ง์ญ๋ณ์Local Variable
์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ณ์๋ ์ธ์คํด์ค ๋ณ์๋ค.
์ง์ญ ๋ณ์๋ ํด๋น ๋ณ์๊ฐ ์ ์ธ๋ ๋ธ๋ญ ๋ฐ์ ๋ฒ์ด๋ ์ ์๋ค.
์ธ์คํด์ค ๋ณ์ ์ค์์ static์ด ๋ถ์ ๋ณ์๊ฐ ํด๋์ค ๋ณ์๋ค.
์ธ์คํด์ค ๋ณ์? ํด๋์ค ๋ณ์? ๋ญ๊ฐ ๋ค๋ฅธ๋ฐ?
- instance variable
ํด๋์ค ์์ญ์ ์ ์ธํ๋ค. ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ง๋ค ๊ฐ์ด ์ด๊ธฐํ๋๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ์๋ iv๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
- class variable
์ธ์คํด์ค ๋ณ์ ์์ 'static'์ด ๋ถ์๋ค๋ฉด ํด๋์ค ๋ณ์๋ค.
cv์ ๊ฐ์ฅ ํฐ ํน์ง์ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ ๋ ์์ฑ๋๋ค๋ ๊ฒ์ด๋ค. ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง๋๊ณ public์ ๋ถ์ด๋ฉด ์ ์ญ ๋ณ์global variable์ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ค.
iv์ฒ๋ผ ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ง๋ค ์ ์ฅ๊ณต๊ฐ์ด ๋ฐ๋ก ์์ง ์๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ cv๋ ํ๋์ ์ ์ฅ๊ณต๊ฐ์ ๊ฐ์ง๋ค. iv์ฒ๋ผ ์ฐธ์กฐ๋ณ์.๋ณ์๋ช ์ผ๋ก ์ฐ๋ ๊ฒ ์๋๋ผ ํด๋์ค์ด๋ฆ.๋ณ์๋ช ์ผ๋ก ์ด๋ค.
๋ฌผ๋ก iv์ ๊ฐ์ด ์ฐธ์กฐ๋ณ์.๋ณ์๋ช ์ผ๋ก ์ธ ์๋ ์์ง๋ง ๊ถ์ฅํ์ง ์๋๋ค.
์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด๋ static๋ณ์์ ๊ฐ์ ๊ณต์ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก static๋ณ์์ ๊ฐ์ ํญ์ ๊ณตํต๋ ๊ฐ์ ๊ฐ๋๋ค.
๋ณดํต final static ~ํ๋ฉด์ ๋ณํ์ง ์๊ณ ์ด๋ค ๊ฐ์ฒด์์๋ ๊ฐ์์ผ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
class Ironman {
static String tonyStark = "robertDowneyJr";
}
public class Avengers {
public static void main(String[] args) {
System.out.println("================BEFORE====================");
System.out.println("Ironman.tonyStark : " + Ironman.tonyStark);
Ironman.tonyStark = "James Gosling";
System.out.println("================AFTER====================");
System.out.println("Ironman.tonyStark : " + Ironman.tonyStark);
System.out.println("------------------------------------------");
System.out.println("iron1.tonyStark : " + iron1.tonyStark);
System.out.println("iron2.tonyStark : " + iron2.tonyStark);
iron1.tonyStark = "SAME";
System.out.println("--------------------------------------------");
System.out.println("iron1.tonyStark : " + iron1.tonyStark);
System.out.println("iron2.tonyStark : " + iron2.tonyStark);
}
}
/*
๊ฒฐ๊ณผ
================BEFORE====================
Ironman.tonyStark : robertDowneyJr
================AFTER====================
Ironman.tonyStark : James Gosling
------------------------------------------
iron1.tonyStark : James Gosling
iron2.tonyStark : James Gosling
--------------------------------------------
iron1.tonyStark : STATIC is shared.
iron2.tonyStark : STATIC is shared.
*/
Method
๋ฉ์๋๋, ์ด๋ค ์์ ์ ์ํํ๋ ์ฌ๋ฌ ์ฝ๋๋ฅผ ํ๋๋ก ๋ฌถ์ ๊ฒ์ด๋ค.
์ด๋ฐ ํํ๋ผ๊ณ ๋ณผ ์ ์๋ค. Input์ด๋ Output์ด ์์ ์๋, ์์ ์๋ ์๋ค.
์์ ๊ทธ๋ฆผ์ ๋น๋์ด ๋ฉ์๋๋ฅผ ํ๋ ๋ง๋ค์ด๋ณธ๋ค๋ฉด ์ด๋ ๋ค.
class ColorBall {
String ballColor;
/* ์ด๋ค ์์ ๊ณต์ด๋ ๋
ธ๋์ ๊ณต์ผ๋ก ๋ฐ๊พธ๋ ๋ฉ์๋ */
String ballColorChange(String ball) { //์ ์ธ๋ถ return type - method name(parameter type)
ball = "YellowBall";
return ball;
}
}
public class MethodEx {
public static void main(String[] args) {
ColorBall ball = new ColorBall();
String ball1 = ball.ballColor = "red ball";
String ball2 = ball.ballColor = "blue ball";
System.out.println("----------before------------");
System.out.println("ball1 : " + ball1);
System.out.println("ball2 : " + ball2);
System.out.println("-----------after------------");
System.out.println("ball1 : " + ball.ballColorChange(ball1));
System.out.println("ball2 : " + ball.ballColorChange(ball2));
}
}
/* ๊ฒฐ๊ณผ
----------before------------
ball1 : red ball
ball2 : blue ball
-----------after------------
ball1 : YellowBall
ball2 : YellowBall
*/
ColorBallํ์ ์ ๋ณ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ballColorChange๋ฉ์๋๋ค.
์ด ๋ฉ์๋๋ ํ๋์ ๋ณผ์ ๋ฃ๋ , ์ด๋ก์ ๋ณผ์ ๋ฃ๋ ๋ ธ๋์ ๋ณผ๋ก ๋ฐ๊พธ์ด ์ถ๋ ฅํ๋ค.
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ธ ๊ฐ์ง
๋์ ์ฌ์ฌ์ฉ์ฑ
์์์ ๋ ์์๋ ๊ฐ๋จํ์ง๋ง, ์ด๊ฒ์ด ์์ฃผ ๋ณต์กํ ์์ ์ด๋ฉด์, ๋ฐ๋ณตํด์ผ ํ๋ ์์ ์ด๋ผ๋ฉด,
๊ทธ๋ฌ๋๊น ๋ณผ์ ๋ง๋ค๊ณ ํ์ธํธ๋ก ๋์ํ๊ณ , ๋ง๋ฆฌ๊ณ , ๋ค์ ๋ค๋ฅธ ์์ผ๋ก ๋ฎ์ด์ฐ๋ ๋ณต์กํ๊ณ ๊ท์ฐฎ์ ์์ ์ด๋ผ๋ฉด, ๋ฉ์๋ ํ๋๋ง ์ ์ํด๋์ผ๋ฉด ๊ท์ฐฎ์ ์ผ์ ๋ฐ๋ณตํ ํ์ ์์ด ์ฌ์ฌ์ฉํ ์ ์๋ค.
1์์ ์ด์ด์ง๋ ์ฅ์ ์ธ๋ฐ, ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๋ค.
ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐํ
ํฐ ๊ท๋ชจ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋, ์์ ๋จ์๋ก ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค๋ฉด
์ ์ฒด ํ๋ฆ์ ์ฝ๊ฒ ํ์ ํ ์ ์๋๋ก ๋จ์ํ๊ฒ ๊ตฌ์กฐํํ ์ ์๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋คํ์ฑPolymorphism (0) | 2020.09.06 |
---|---|
์์Inheritance (0) | 2020.09.06 |
์ ์ด์Modifier (0) | 2020.09.06 |
๊ฐ์ฒด์งํฅ2 (0) | 2020.09.06 |
Java๋? (0) | 2020.09.06 |