Java | ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ฐ์ต ๋ฌธ์ ๋ฐ ํ์ด
- -
ํ๋ฃจ์ ๊ณต๋ถ ๋ด์ฉ 2๊ฐ์ฉ ์ฌ๋ฆฌ๋ค๊ฐ ์ต๊ทผ ์ ์์ ๋ถํ๋ ์์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๊ณ ,
์ ๋ก๋๋ฉฐ ๊ณต๋ถํ๋ ๋ฒ์๋ฉฐ ์กฐ๊ธ์ฉ ์ค์ด๋ค๊ณ ์๋ค.
๋ฌด๋ฆฌํ์ง ์๊ณ ์ต๋ํ ํ ์ ์๋ ๋งํผ ํ๊ณ ์๋๋ฐ,
๊ณต๋ถํ๋ ๋ด์ฉ์ด ์๊ฐ ์ด์์ผ๋ก ๋๋๊ฐ ์๊ณ ์ฌ์คํ๋ค.
์ต์ํด์ง๋ ค๊ณ ๋ฌด์์ ๋ฐ๋ผํ๊ธฐ ์ค์ธ๋ฐ๋
์ ๋ฐ๋ผ๊ฐ๊ณ ์๋๊ฑด์ง, ์ ํ๊ณ ์๋๊ฒ ๋ง๋๊ฑด์ง ์ถ๋ค.
์ด์ ์๋ ์ฝ๋ฉ ๊ณต๋ถํ๋ฉด์ ์ด๋ ๊ฒ ๋ด ์ค๋ ฅ๊ณผ ๋์ ์ํ๋ฅผ ์ ๊ฒํ๋ ์๊ธฐ๊ฐ ์์๋๋ฐ,
๋ฑ ๋ด๊ฐ ์๋กญ๊ฒ ๋ฐฐ์ฐ๊ณ ์ตํ๋ ์๊ฐ์ด๋๋ผ.
์ด ์๊ฐ๋ ์ง๋๊ฐ ๊ฒ์ด๊ณ ์ ์ง๋๊ฐ ์ ์๊ฒ
๋ด ๋ชธ ์ ์ดํผ๋ฉด์ ์ ๋ฐฐ์๋ณด์.
์ฑ๊ธํ๊ฒ ์๊ฐํ์ง ๋ง๊ณ ,
์กฐ๊ธ์ฉ ์กฐ๊ธ์ฉ
[์ถ์ฒ : ์ ํ ํฌ ์๋ฐ]
์ฐ์ต๋ฌธ์ ๋ฐ ํ์ด
package Do_Test;
// ์ ๋ต ํ์ด!!!!
// ๋ฌธ์ 1
class Calculator {
int value;
Calculator() {
this.value = 0;
}
void add(int val) {
this.value += val;
}
int getValue() {
return this.value;
}
// ๋ฌธ์ 3
void isOdd(int val) {
if (val % 2 == 0) {
System.out.println("false");
} else {
System.out.println("true");
}
}
// ๋ฌธ์ 3 ์ ๋ต
// boolean isOdd(int num) {
// return num % 2 == 1;
// }
// boolean ์ผ๋ก ์ฐธ ๊ฑฐ์ง์ ์ข ๋ ๊ฐ๋จ ๋ช
๋ฃํ๊ฒ ์ถ๋ ฅํ๊ฒ ํจ
// ๋ฌธ์ 4
int avg(int[] arr) {
// System.out.print(arr[1]); // 3
int total = 0;
for (int i = 0; i < arr.length; i++) {
add(arr[i]);
total = this.value;
System.out.println(total); // 25 ์ถ๋ ฅ
}
this.value = total / arr.length;
// System.out.println(this.value); // 5 ์ถ๋ ฅ
return this.value;
}
// ๋ฌธ์ 4 ์ ๋ต
// ๋ฐฐ์ด
// int avg(int[] data) {
// int total = 0;
// for (int num : data) {
// total += num;
// }
// return total / data.length;
// }
//
// ๋ฆฌ์คํธ
// int avg(ArrayList<Integer> data) {
// int total = 0;
// for (int num : data) {
// total += num;
// }
// return total / data.size();
// }
}
// ๋ฌธ์ 1-1
class UpgradeCalculator extends Calculator { // Calculator๋ฅผ ์๋ก์ด UpgradeCalculator์ ์์
void minus(int val) { // minus๋ฉ์๋ ์์ฑ
this.value -= val;
}
}
// ๋ฌธ์ 2
class MaxLimitCalculator extends Calculator {
@Override
int getValue() {
// System.out.println(this.value); // 110
if (this.value > 100) {
this.value = 100;
return this.value;
} else {
return super.getValue();
}
}
// ๊ณผ์ ์์ ์กฐ๊ฑด์ ์ ์ํ๋ ๊ฒ?
// ๊ฒฐ๊ณผ์์ ์กฐ๊ฑด์ ์ ์ํ๋ ๊ฒ?
// ๋ฌธ์ 2 ์ ๋ต
// class MaxLimitCalculator extends Calculator {
// void add(int val) {
// this.value += val;
// if (this.value > 100) {
// this.value = 100;
// }
// }
// }
}
// ๋ฌธ์ 6
class Calculator_06 {
int value; // Integer > int
void add(int val) {
this.value += val;
}
public int getValue() { // Integer > int
return this.value;
}
}
// ๋ฌธ์ 6 ์ ๋ต
// Calculator() {
// this.value = 0;
// }
// ๊ทธ๋ฅ ๋จ์ํ๊ฒ.. Calculator ์ ์์ฑ์๋ฅผ ๋ง๋ค๊ณ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ ๊ฒ..
// ์ ์ด๋ ต๊ฒ ์๊ฐํ์ง..?
// ๋ฌธ์ 7
interface Mineral {
int getpoint();
}
class Gold implements Mineral {
public int getpoint() {
return 100;
}
}
class Silver implements Mineral {
public int getpoint() {
return 90;
}
}
class Bronze implements Mineral {
public int getpoint() {
return 80;
}
}
// ์ฌ๊ธฐ๊น์ง๋ ์ ๋ต์ธ๋ฐ..
class MineralCalculator {
int value = 0;
// ์ ๋ต
public void add(Mineral mineral) {
this.value += mineral.getpoint();
}
/*
* ๋ค์์ฒ๋ผ Mineral ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฌผ์ ๊ฐ์น๋ฅผ ๋ฆฌํดํ๋ getValue ๋ฉ์๋๋ฅผ ์ ์ธํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๊ด๋ฌผ ํด๋์ค๋ค์
* Mineral ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ MineralCalculator ํด๋์ค์ add ๋ฉ์๋๋ ๋ชจ๋ ๊ด๋ฌผ์ ์ค๋ฒ๋ก๋ฉํ์ง ์๊ณ
* Mineral ๊ฐ์ฒด๋ง ์ฒ๋ฆฌํ๋๋ก ์์ ํ๋ค.
*/
// public void add(Mineral mineral) {
// this.value += 100;
// }
//
// public void add(Silver silver) {
// this.value += 90;
// }
//
// public void add(Bronze bronze) {
// this.value += 80;
// }
public int getValue() {
return this.value;
}
}
// ๋ฌธ์ 8
interface Predator_08 {
}
class Animal_08 {
}
class Dog_08 extends Animal_08 {
}
class Lion_08 extends Animal_08 implements Predator_08 {
}
// ๋ฌธ์ 9
interface Predator_09 {
String bark();
}
abstract class Animal_09 {
public String hello() {
return "hello";
}
}
class Dog_09 extends Animal_09 {
}
class Lion_09 extends Animal_09 implements Predator_09 {
public String bark() {
return "Bark bark!!";
}
}
public class T1_Test {
public static void main(String[] args) {
// ๋ฌธ์ 1 == ์ ๋ต!!
Calculator calA = new Calculator();
calA.add(10);
System.out.println(calA.getValue()); // 10 ์ถ๋ ฅ
// Calculator ํด๋์ค๋ฅผ ์์ํ๋ UpgradeCalculator๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ๋บ ์ ์๋ minus ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ๋ณด์.
// ์ฆ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
UpgradeCalculator calB = new UpgradeCalculator();
calB.add(10);
calB.minus(3);
System.out.println(calB.getValue()); // 10์์ 7์ ๋บ 3์ ์ถ๋ ฅ
// ๋ฌธ์ 2 == ๋ค๋ฅธ ์ ๋ต
// ๊ฐ์ฒด๋ณ์ value๊ฐ 100 ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง ์ ์๋๋ก ์ ํํ๋ MaxLimitCalculator ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์.
// ์ฆ ๋ค์๊ณผ ๊ฐ์ด ๋์ํด์ผ ํ๋ค.
MaxLimitCalculator calC = new MaxLimitCalculator();
calC.add(50);
calC.add(70);
// calC.returnValue(); // void ์ฌ์ฉ
System.out.println(calC.getValue()); // 100 ์ถ๋ ฅ
// ๋ฌธ์ 3 == ๋ค๋ฅธ ์ ๋ต
// ๋ค์์ ํด๋์ค์ ์ฃผ์ด์ง ์ ์๊ฐ ํ์์ธ์ง ์ง์์ธ์ง ํ๋ณํด ์ฃผ๋ ๋ฉ์๋(isOdd)๋ฅผ ์ถ๊ฐํด ๋ณด์.
// (ํ์์ด๋ฉด true, ์ง์๋ฉด false๋ฅผ ๋ฆฌํดํด์ผ ํ๋ค.)
Calculator CalD = new Calculator();
CalD.isOdd(57); // ํ์์ด๋ฉด true, ์ง์๋ฉด false
// ๋ฌธ์ 4 == ๋ค๋ฅธ ์ ๋ต
// ๋ค์ ํด๋์ค์ ์ ์ ๋ฐฐ์ด ๋๋ ์ ์์ ๋ฆฌ์คํธ ์
๋ ฅ์ ๊ทธ ํ๊ท ๊ฐ์ ๊ตฌํด ์ ์๋ก ๋ฆฌํดํ๋ avg ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ๋ณด์.
int[] data = { 1, 3, 5, 7, 9 };
Calculator calE = new Calculator();
int result = calE.avg(data);
System.out.println(result); // 5 ์ถ๋ ฅ
// ๋ฌธ์ 5 == ํ๋ฆผ : ์ค๋ต๋ฉ๋ชจ ํ์ธ
// ๋ค์ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๊ณ ๊ทธ ์ด์ ์ ๋ํด์ ์ค๋ช
ํ์์ค.
// import java.util.ArrayList;
// import java.util.Arrays;
//
// public class Sample {
// public static void main(String[] args) {
// ArrayList<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3));
// == ๋ฐฐ์ด๋ฆฌ์คํธ ์ซ์ํํ a ๋ณ์ ์ ์ 1, 2, 3
// ArrayList<Integer> b = a;
// == b = a?
// a.add(4);
// == a ๋ณ์์ 4 ์ถ๊ฐ
// ๋ต์ํ์ธ : System.out.println(a==b); // true ์ถ๋ ฅ
// System.out.println(b.size());
// == b ๋ณ์์ ๋ฐฐ์ด๋ฆฌ์คํธ ํฌ๊ธฐ(์ฌ์ด์ฆ)?
// }
// }
// ๋์ ์์ ์ถ๋ ฅ : 1, 2, 3 / ์ ์ด์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ ์๊ฐํ๊ณ ์์ฑํจ..;;
// ์ด์ : a ๋ณ์์ ์ถ๊ฐ ์ ํ๋ก๊ทธ๋จ ์์์ ๋ฐ๋ฅธ b ๋ณ์์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ๋ก b ์ ์ถ๋ ฅ๊ฐ์ a ์ ์ด๊ธฐ๊ฐ์ด ๋๋ค.
// ์ ๋ต : 4๊ฐ ์ถ๋ ฅ๋๋ค.
// ์ด์ : b ์ a ๋ ๋ชจ๋ ๋์ผํ ๋ฆฌ์คํธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ
// ์ด์ ํ์ด : ๋์ถฉ b ๊ฐ์ฒด๊ฐ a ๊ฐ์ฒด์ ๊ฐ๊ธฐ ๋๋ฌธ์ a ๊ฐ์ฒด ๋ฆฌ์คํธ์ ๊ฐ์ด ์ถ๊ฐ๋์ด์ ์ด 4 ๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค.
// a ๊ฐ์ฒด์ b ๊ฐ์ฒด์ ๋
๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด, ArrayList<Integer> b = new ArrayList<>(a); ๋ฅผ ์ฌ์ฉํด์ ์ ๊ท
// ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
// ๋ฌธ์ 6 == ๋ค๋ฅธ ์ ๋ต : ์ถ์ ์์ ์๋๊ฐ ์๋ ๋ฏํ ๋ต๋ณ
// ๋ค์์ Calculator ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ฐ์ ๋ํ ํ์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ ์์ ์ด๋ค. ํ์ง๋ง ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
// Calculator ํด๋์ค๋ฅผ ์์ ํ์ฌ ๋ค์์ ์ฝ๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ์์ค.
Calculator_06 cal = new Calculator_06();
cal.add(3); // ์ฌ๊ธฐ์ NullPointerException ์ด ๋ฐ์ํ๋ค.
System.out.println(cal.getValue());
// Integer ์ ์๋ชป๋ ํ๊ธฐ๋ก int ๋ก ๋ณ๊ฒฝํ ์คํํ๋ฉด ์ ์ ์๋
// ๋ฌธ์ 7 ๋ชปํ์๋ค : ์ธํฐํ์ด์ค์ ๋ํ ์ดํด๋ ๋ถ์กฑ : ๋ค์ ๊ณต๋ถ ํ์
// ๋ค์์ ๊ด๋ฌผ์ ๊ฐ์น๋ฅผ ๊ณ์ฐํ๋ MineralCalculator ํด๋์ค์ ๊ทธ ์ฌ์ฉ๋ฒ์ด ๋ด๊ธด ์ฝ๋์ด๋ค.
// ๊ด๋ฌผ ๊ณ์ฐ๊ธฐ๋ ๊ธ์ธ ๊ฒฝ์ฐ 100, ์์ธ ๊ฒฝ์ฐ 90, ๊ตฌ๋ฆฌ์ ๊ฒฝ์ฐ๋ 80์ ๊ฐ์น๋ฅผ ๋ํ๋ ๊ธฐ๋ฅ(add ๋ฉ์ค๋)์ด ์๋ค.
// ํ์ง๋ง ์ด ๊ด๋ฌผ ๊ณ์ฐ๊ธฐ๋ ๊ด๋ฌผ์ด ์ถ๊ฐ๋ ๋๋ง๋ค add ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
// ๊ด๋ฌผ์ด ์ถ๊ฐ๋๋๋ผ๋ MineralCalculator ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋๋ก ์ฝ๋๋ฅผ ์์ ํ์์ค.
MineralCalculator cal_07 = new MineralCalculator();
cal_07.add(new Gold());
cal_07.add(new Silver());
cal_07.add(new Bronze());
System.out.println(cal_07.getValue()); // 270 ์ถ๋ ฅ
// ๋ฌธ์ 8 == ์ ๋ต
// ๋ค์์ ์ฝ๋๋ฅผ ๋ณด๊ณ 1๋ฒ, 2๋ฒ, 3๋ฒ, 4๋ฒ, 5๋ฒ ๋ฌธ์ฅ ์ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ฅ์ ๋ชจ๋ ์ฐพ๊ณ ์ค๋ฅ์ ์์ธ์ ๋ํด์ ์ค๋ช
ํ์์ค.
Animal_08 a_08 = new Animal_08(); // 1๋ฒ pass
Animal_08 b_08 = new Dog_08(); // 2๋ฒ pass
Animal_08 c_08 = new Lion_08(); // 3๋ฒ pass
Dog_08 d_08 = new Animal_08(); // 4๋ฒ error
// ์์ธ : ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๊ฐ์ญํ์ง ๋ชปํ๋ค.
// ์ถ๊ฐ ํด์ค : IS-A ๊ด๊ณ ์ฑ๋ฆฝ์ด ๋์ง ์๋๋ค. : IS-A ๊ด๊ณ์ ๋ํด์ ์์ธํ ์ฐพ์๋ณด๊ธฐ
Predator_08 e_08 = new Lion_08(); // 5๋ฒ pass?
// ๋ฌธ์ 9 == ์ ๋ต : ์์ธ์ ๋ํ ์ค๋ช
์ ์ข ๋ ๊ตฌ์ฒด์ ์ด๊ณ ์ ํํ๊ฒ ํ์ด๋ณด๊ธฐ
// ๋ค์์ ์ฝ๋๋ฅผ ๋ณด๊ณ 1๋ฒ, 2๋ฒ, 3๋ฒ, 4๋ฒ, 5๋ฒ, 6๋ฒ ๋ฌธ์ฅ ์ค์์
// ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ฅ์ ๋ชจ๋ ์ฐพ๊ณ ์ค๋ฅ์ ์์ธ์ ๋ํด์ ์ค๋ช
ํ์์ค.
Animal_09 a_09 = new Lion_09();
Lion_09 b_09 = new Lion_09();
Predator_09 c_09 = new Lion_09();
System.out.println(a_09.hello()); // 1๋ฒ pass
System.out.println(a_09.bark()); // 2๋ฒ error
// ์์ธ : ์ธํฐํ์ด์ค ํด๋์ค๋ ํด๋์ค ์ง์ ํ ์ฌ์ฉ ๊ฐ๋ฅ?
// ์ถ๊ฐ ํด์ค : Animal ํ์
์ ๊ฐ์ฒด๋ hello ๋ฉ์๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ
System.out.println(b_09.hello()); // 3๋ฒ pass
System.out.println(b_09.bark()); // 4๋ฒ pass
System.out.println(c_09.hello()); // 5๋ฒ error
// ์์ธ : ์ถ์ํด๋์ค์ธ Animal์ ์ธํฐํ์ด์ค ํด๋์ค๋ก ๋ถ๋ฌ์จ ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค?
// ์ถ๊ฐ ํด์ค : c ๊ฐ์ฒด๊ฐ Predator ํ์
์ผ๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ, Predator ํ์
์ ๊ฐ์ฒด๋ bark ๋ฉ์๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ
System.out.println(c_09.bark()); // 6๋ฒ pass
}
}
์ฐ์ต ๋ฌธ์ ๊ฐ 1~9๋ฌธ์ ๊น์ง ์๋๋ฐ ํ๋์ java ํ์ผ๋ก ํ๊ณ ํ๋ค๋ณด๋ ๋ค๋ฆ๊ฒ ๋ดค์ ๋ ์์ ๋ ์ ์์๋ค..
๋๊ทธ๋ฌ์ด ๋ง์์ผ๋ก ๋ด์ฃผ๊ธธ ๋ฐ๋๋ค.
(์๋ฌด๋ ์๋ณด๋๊ฑฐ ์๋ค)
์ค๊ณต์!
'๐ป ๊ณต๋ถ ๊ธฐ๋ก > โ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java | Comparator (0) | 2023.01.09 |
---|---|
Java | equals (0) | 2023.01.09 |
Java | ์ถ์ ํด๋์ค(Abstract Class) (0) | 2023.01.06 |
Java | ๋คํ์ฑ(Polymorphism) (0) | 2023.01.06 |
Java | ์ธํฐํ์ด์ค(Interface) (0) | 2023.01.06 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค