기본형 매개변수와 참조형 매개변수
- 기본형 매개변수 : 변수의 값을 읽기만 할 수 있습니다.
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있습니다.
재귀호출
- 매서드내에서 자기 자신을 반복적으로 호출할 수 있습니다.
- 재귀호출은 반복문으로 바꿀 수 있으며, 반복문보다 효율이 낮습니다.
- 팩토리얼, 제곱, 폴더 목록 표시 등에 사용됩니다.
int Factorial(int n){
if(n==1)
return 1;
return n*Factorial(n-1);
}
멤버간 참조와 호출
- 같은 클래스간에는 객체생성이나 참조변수 없이 참조할 수 있다. 그러나 static 멤버들은 instance 멤버들을 참조할 수 없습니다.
class Test{
void instanceMethod(){};
static void classMethod(){};
void instanceMethod2(){
instanceMethod();
classMethod();
}
static void classMethod2(){
instancceMethod(); // err
classMethod();
}
}
class Test{
int iv;
static int cv;
void instanceMethod(){
System.out.println(iv);
System.out.println(cv);
}
static classMethod(){
System.out.prtinln(iv); // err
System.out.println(cv);
}
}
오버로딩
- 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 합니다.
- 메서드 이름이 같아야 합니다. (조건)
- 매개변수 개수 또는 타입이 달라야 합니다. (조건)
생성자(Constructor)
- 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' 입니다. (역할)
- 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용됩니다. (역할)
- 모든 클래스에는 생성자가 존재합니다.
- 리턴이 없어도 void 타입을 적지 않습니다. (일반 메서드와의 차이점)
this
- 생성자를 호출 후에 만들어진 주소를 지칭하는 키워드입니다.
- 실행시 메모리에 바로 올라갈 static 메서드안에서는 실행되지 않습니다.
- 생성자함수안에서는 사용 가능합니다. 단 첫줄에 입력해야 합니다.
변수의 초기화
- 지역변수 : 초기화가 필수입니다.
- 전역변수 : 초기화하지 않으면 컴파일 시 기본값으로 입력됩니다.
class InitTest{
int x;
int y = x;
void method(){
int i;
int j = j // err 지역변수를 초기화하지 않고 사용했음
}
}
멤버변수의 초기화
class InitTest{
static int cv = 1; // 명시적 초기화
int iv = 1; // 명시적 초기화
static { cv = 2;} // 클래스 초기화 블럭
{iv = 2;}
InitTest(){
iv = 3; // 생성자
}
}
메서드를 호출할 때 파라미터를 전달하는 방법
- Call by Reference는 참조를 직접 넘기기 때문에 호출자의 변수와 수신자의 파라미터는 완전히 동일한 변수입니다.
메서드 내에서 파라미터를 설정하면 그래도 원본 변수에도 반영됩니다.
- Call By Value는 메서드를 호출하는 변수와 수신자의 파라미터는 복사된 서로 다른 변수입니다.
값만을 전달하기 때문에 수신자의 파라미터를 수정해도 호출자의 변수에는 아무런 영향이 없습니다.
- Java는 오직 Call By Value로만 전달됩니다.
원시타입전달
class PrimitiveTypeTest{
void test(){
int a = 1;
int b = 2;
//before
assertEquals(a,1);
assertEquals(b,2);
modify(a,b);
//after : modify(a,b)이후에도 값이 변하지 않음
assertEquals(a,1);
assertEquals(b,2);
}
private void modify(int a, int b){
a = 5;
a = 10;
}
}
참조타입전달
class User{
public int age;
public User(int age){
this.age = age;
}
}
public class ReferenceTypeTest{
void test{
User a = new User(10);
User b = new User(30);
//before
assertEquals(a.age,10);
assertEquals(b.age,30);
modify(a,b);
//after
assertEquals(a.age,11);
assertEquals(b.age,20);
}
private void modify(User a, User b){
// modify의 a와 test의 a는 같은 객체를 바라봐서 영향이 있음
a.age++;
// b에 새로운 객체를 할당하면 가리키는 객체가 달라지고 원본에는 영향이 없음
b = new User(30);
b.age++;
}
}
'KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정' 카테고리의 다른 글
05/07 18일차 객체지향언어II : super(), package와 import (0) | 2024.05.07 |
---|---|
05/03 17일차 객체지향언어II : 상속, 오버라이딩, package와 import (0) | 2024.05.03 |
04/30 15일차 객체지향언어I : 변수와 메서드 (0) | 2024.04.30 |
04/29 14일차 배열 (0) | 2024.04.29 |
04/25 12일차 (0) | 2024.04.25 |