λ©μλ(Method)
λ©μλμ μΈμ μ λ¬
λ©μλ μ¬μ΄μ μλ£ κ΅νμ `λ§€κ° λ³μ`(μΈμ)μ μν΄ μ΄λ£¨μ΄μ§λ€.
νμ λ§€κ° λ³μ(formal paramter,κ°μΈμ) : λ©μλκ° νΈμΆλλ μͺ½μ νΈμΆν λ©μλμμ λ겨λ°λ κ°μ κΈ°μ΅
μ€ λ§€κ° λ³μ(actual parameter, μ€μΈμ) : λ©μλλ₯Ό νΈμΆν λ νΈμΆ λ°λ ν¨μμκ² λ겨주λ κ°μ μλ―Έ
Call by Value(κ°μ μν μΆμΆ)
κΈ°λ³Έ μλ£ νμΌλ‘ μΈμ μ λ¬
κ°(value)μ νΈμΆλ λ©μλμ μΈμμ λ³΅μ¬ νλ©° 볡μ¬λ κ°μ λ©μλ λ΄μμ local value νΉμ§μ κ°μ
νΈμΆ λ©μλμ νΈμΆλ λ©μλκ° κ°κ°μ λ§€κ° λ³μμ λν κΈ°μ΅ κ³΅κ°μ λ°λ‘ ν보νμ¬ κ°κ° λ 립μ μΌλ‘ μ¬μ©λλ©°,
λ©μλμ νμ λ§€κ°λ³μ κ°μ΄ λ³κ²½λμ΄λ νΈμΆν λ©μλμ μ€ λ§€κ°λ³μ κ°μ λ³κ²½λμ§ μλλ€.
Call By Reference (μ°Έμ‘°μ μν νΈμΆ)
λ νΌλ°μ€ νμΌλ‘ μΈμλ₯Ό μ λ¬(λ°°μ΄, ν΄λμ€ μ°Έμ‘°ν, μΈμ€ν΄μ€ μ°Έμ‘°νλ±)
νΈμΆλ λ©μ€λλ‘ κ°(value)λ₯Ό μ λ¬ νλ κ²μ΄ μλλΌ μ°Έμ‘° μμΉλ₯Ό μ λ¬
package ch06.unit03;
//νλΌλ§€ν° μ λ¬ λ°©λ²
public class Ex11 {
public static void main(String[] args) {
Demo1 d = new Demo1(); // dλ μ£Όμλ₯Ό κ°λλ€ xκ° μ μ₯λ κ³³μ μ£Όμ
int[] aa = new int[] { 1, 2, 3 }; // aa:μ£Όμ
int a = 5;
d.sub1(a);
System.out.println("sub1() νΈμΆν a : " + a);
d.sbu2(d);
System.out.println("sub2() νΈμΆν d.x : " + d.x); // 20
d.sbu3(aa);
System.out.println("sub3() νΈμΆν aa[1] : " + aa[1]);
Demo1 d2 = new Demo1();
Demo1 d3 = new Demo1();
d2.sbu4();
System.out.println(d2.y + ":" + d3.y);
}
}
class Demo1 {
int x = 10;
int y;
// call by value : κ°μ λ겨 λ°μ
public void sub1(int a) {
a += 10; // 15
}
public void sbu2(Demo1 obj) {
obj.x += 10;
}
public void sbu3(int[] a) {
a[1] += 10;
}
public void sbu4() {
y = 100; // sub4() λ©μλλ₯Ό νΈμΆν κ°μ²΄κ²
}
}
μ¬κ·νΈμΆ
" λ©μλ λ΄μμ λ©μλ μκΈ° μμ μ νΈμΆνλ λ°©μμ μ¬κ· νΈμΆ(recursive call)μ΄λΌ νκ³ , μ΄λ¬ν νΉμ§μ μ¬κ·(recursion, λλΆλ¦)λΌ νλ€."
μ½λκ° κ°κ²°νκ³ μ€λ₯ μμ μ΄ μ©μ΄νμ§λ§, μ²λ¦¬ μλκ° λλ € λ°λ³΅λ¬Έ λ³΄λ€ λΉν¨μ¨μ .
νλ μ΄μμ μ’ λ£ μ‘°κ±΄μ μ¬μ©νμ¬ μ¬κ· νΈμΆμ μ’ λ£ ν΄μΌ νλ€. μ¬κ·νΈμΆμ μ λ¬Έμ λ₯Ό λΆλΆ λ¬Έμ λ‘ μ€μ¬κ°λ©΄μ μ’ λ£ μ‘°κ±΄μ΄ λ λ κΉμ§ λ°λ³΅νλ€.
package ch06.unit03;
//μ¬κ·νΈμΆ : μ΄μ μνμ κ°μ Stackμ 보κ΄
//μ¬κ·νΈμΆμ μ’
λ£ μ‘°κ±΄μ μ£Όμ§ μμΌλ©΄ StackOverflowError λ°μ
public class Ex12 {
public static void main(String[] args) {
Demo2 obj = new Demo2();
obj.write(5);
System.out.println();
}
}
class Demo2 {
public void write(int n) {
if (n > 1) {
write(n - 1);
}
System.out.println(n + " ");
}
}
package ch06.unit03;
public class Ex13 {
public static void main(String[] args) {
Demo3 obj = new Demo3();
int s = obj.sum(10);
System.out.println(s);
}
}
class Demo3 {
public int sum(int n) {
/*
* if(n>1) {
* return n + sum (n-1);
* }
* return n;
*/
return (n>1) ? sum(n-1)+ n:1;
}
}
package ch06.unit03;
public class Ex14 {
public static void main(String[] args) {
Demo4 obj = new Demo4();
obj.print(3);
}
}
class Demo4{
public void print (int n) {
System.out.println("start :" +n);
if(n>1) {
print(n-1);
print(n-1);
}
System.out.println("end : "+n);
}
}
package ch06.unit03;
public class Ex15 {
public static void main(String[] args) {
Demo5 obj = new Demo5();
double s = obj.pow(2, 10);
System.out.println(s);
s = obj.pow(2, -2);
System.out.println(s);
}
}
class Demo5 {
public double pow(int x, int y) {
if (y >= 0) {
return y == 0 ? 1 : x * pow(x, y - 1);
} else {
return 1.0 / x * pow(x, y + 1);
}
}
public double pow2(int x,int y) {
return y == 0 ? 1 : x * pow2(x, y - 1);
}
}
νΌλ³΄λμΉ μμ΄, μ¬κ·ν¨μλ‘ κ΅¬νκΈ°
package ch06.unit03;
public class Ex16 {
//νΌλ³΄λμΉ μμ΄ : 0 1 1 2 3 5 8 13 21 ....
public static int fibonacci(int n) {
return n<2 ? n : fibonacci(n-1)+fibonacci(n-2);
}
public static void main(String [] args) {
int n;
for(int i=0; i<10; i++) {
n = fibonacci(i);
System.out.println(n+" ");
}
System.out.println();
}
}
λ©μλ μ€λ²λ‘λ©
ν ν΄λμ€ λ΄μμ μ΄λ¦μ΄ κ°μ λ©μλλ₯Ό μ μ νλ κ²μΌλ‘ λ€μκ³Ό κ°μ μ‘°κ±΄μ΄ μ±λ¦½ν΄μΌ νλ€.
λ§€κ°λ³μ νμ μ΄ λ€λ₯΄κ±°λ, λ§€κ°λ³μμ κ°μκ° λ¬λΌμΌ νλ€.
μ€λ²λ‘λ© λ λ©μλλ λ§€κ°λ³μμ μν΄μλ§ κ΅¬λΆλλ€. λ§€κ°λ³μλ κ°μΌλ λ°ννμ΄ λ€λ₯Ό κ²½μ°μλ μ»΄νμΌ μ€λ₯κ° λ°μνλ€. λ©μλ λ¦¬ν΄ νμ μ μ€λ²λ‘λ©μ ꡬννλλ° μλ¬΄λ° μν₯μ μ£Όμ§ λͺ»ν¨.
λ§€κ°λ³μμ κ°μλ νμ μ΄ λ€λ₯΄μ§λ§, μΆλ ₯νλ κΈ°λ₯μ΄ λμΌν System.out.println()κ° κ°μ₯ λνμ μ΄λ€.
λ©μλ μ΄λ¦ + νλΌλ―Έν° λ³μμ μ + νμ + μμλ₯Ό λ¬Άμ΄μ λ©μλ μκ·Έλμ²λΌ λΆλ¦. μμ±μλ μ€λ³΅ μ μ κ°λ₯.
package ch06.unit03;
public class Ex17 {
public static void main(String[] args) {
Demo7 obj = new Demo7();
byte a = 10; // λ§€κ°λ³μμ μλ£νμ΄ κ°κ±°λ ν°κ²μ€ κ°μ₯ μ μκ² μΆλ ₯
obj.disp(a);
int b = 10; // int
obj.disp(b);
long c = 10; // float
obj.disp(c);
// double d = 10;
// obj.disp(d); // μ»΄μ€λ₯
}
}
// overloading : λ©μλ μ€λ³΅ μ μ
class Demo7 {
public void disp() {
System.out.println("μΈμ μλ λ©μλ");
}
// μ€λ²λ‘λ©μ λ¦¬ν΄ νμ
μΌλ‘ ꡬλΆνμ§ μκ³ λ§€κ°λ³μμ κ°μκ° λ€λ₯΄κ±°λ
// λ§€κ°λ³μμ νμ
μ΄ λ¬λΌμΌ νλ€
/*
* public int disp() { // μ»΄νμΌ μ€λ₯ return 1; }
*/
public void disp(short n) {
System.out.println("short : " + n);
}
public void disp(int n) {
System.out.println("int : " + n);
}
public void disp(float n) {
System.out.println("float : " + n);
}
}
λ°μΈλ©(binding)
μμ±κ³Ό κ°μ²΄ λλ μ°μ°κ³Ό κΈ°νΈλ₯Ό μ°κ΄μν€λ κ², λ³μμ λ°μ΄ν° νμ μ΄ λ¬΄μμΈμ§λ₯Ό μ νκ±°λ λ©μλμ νΈμΆκ³Ό μ€μ λ©μλλ₯Ό μ°κ²°νλ λ°©λ² λ± νλ‘κ·Έλ¨μ κ΅¬μ± μμμ μ±κ²©μ κ²°μ νλκ²μ΄λ€.
μ μ λ°μΈλ©(static binding) | λμ λ°μΈλ©(dynamic binding) |
μ»΄νμΌ μκ°μ μ±κ²©μ΄ κ²°μ λλ κ² | μ€νμκ°μ μ±κ²©μ΄ κ²°μ λλ κ² |
μ»΄νμΌ μ νμ μ λν μ λ³΄κ° κ²°μ λλ―λ‘ μλκ° λΉ λ₯΄λ€ | μ€νλμ€ μ±κ²©μ΄ κ²°μ λλ―λ‘ μ μ°μ±μ κ°μ§λ§ μλκ° λλ¦¬κ³ , λ³μμ μμμΉ λͺ»ν νμ μΌλ‘ μμ μ±μ΄ μ νλ¨ |
βΆ λ©μλμ λ°μΈλ© : λ©μλμ λν νΈμΆμ λ©μλ λͺΈμ²΄μ μ°κ²° νλ κ².
μ μ λ°μΈλ© | λμ λ°μΈλ© |
κ°μ²΄μ νμ μ΄ μ»΄νμΌλ¬μ μν΄ μ»΄νμΌ μμ κ²°μ | κ°μ²΄ νμ μ΄ λ° νμ μ€μ κ²°μ |
μ»΄νμΌ μ νΈμΆν λ©μλκ° κ²°μ | νλ‘κ·Έλ¨ μ€ν λμ€ λ©μλκ° νΈμΆλ λ κ·Έ λ©λͺ¨λ¦¬μ μ°Έμ‘°λ₯Ό μμλ΄λ κ² |
λ©μλ μ€λ²λ‘λ©(overloading) | λ©μλ μ€λ²λΌμ΄λ©(overriding) |
private,final,static λ©μλλ λͺ¨λ μ μ λ°μΈλ© |
package ch06.unit03;
// μ€λ²λ‘λ©
public class Ex18 {
public static void main(String[] args) {
Demo8 obj = new Demo8 ();
short a = 10;
int b = 20;
long c = 30;
obj.disp(a); // int
obj.disp(b); // int
obj.disp(c); // Long
Byte x = 5;
obj.disp(x); // int
Short y = 7;
obj.disp(y); // Short
}
}
/*
* Wrapper class : κΈ°λ³Έν λ°μ΄ν°λ₯Ό κ°μ²΄ λ¨μλ‘ μ²λ¦¬ ν μ μλλ‘ ν΄λμ€λ₯Ό μ 곡
* Byte, Short, Integer, Long, Float, Double, Character, Boolean λ±
*/
class Demo8 {
public void disp(Short n) {
System.out.println("Short : " + n);
}
public void disp(int n) {
System.out.println("int : " + n);
}
public void disp(Float n) {
System.out.println("Float : " + n);
}
public void disp(Long n) {
System.out.println("Long : " + n);
}
}
λΉμ ν μΈμ
λΉμ ν μΈμ(Variable-Length Arguments)λ κ°μ νμ μ λ§€κ°λ³μλ₯Ό κ°λ³μ μΌλ‘ μ μΈ ν λ μ¬μ©νλ€. λ©μλλ₯Ό μ μν λ λ§€κ°λ³μ νμ λ€μμ μλ΅ λΆνΈμΈ(eliipsis)μΈ '...'μ λΆμ¬ μ μΈνλ€.
package ch06.unit03;
public class Ex19 {
public static void main(String[] args) {
// λΉμ νμΈμ
Demo9 obj = new Demo9();
int s = obj.sum(1,3,5,7,9);
System.out.println(s);
}
}
class Demo9 {
public int sum(int...args) {
int s = 0;
for(int n : args) {
s+=n;
}
return s;
}
}
'π» > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] 10μΌμ°¨ : μλ°μ κΈ°λ³Έ API ν΄λμ€ (0) | 2024.02.27 |
---|---|
[Java] 9μΌμ°¨ : ν΄λμ€(class)μ κ°μ²΄(Object) μμ±μ (0) | 2024.02.26 |
[Java] 8μΌμ°¨ : ν΄λμ€(class)μ κ°μ²΄(Object) λ©μλ(1) (0) | 2024.02.23 |
[Java] 8μΌμ°¨ : ν΄λμ€(class)μ κ°μ²΄(Object) (0) | 2024.02.23 |
[Java] 7μΌμ°¨: κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° (0) | 2024.02.23 |