일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Github
- array
- GIT
- numpy
- Google Spreadsheet
- dataframe
- Mac
- math
- Python
- list
- Tkinter
- Kotlin
- gas
- PANDAS
- SQL
- matplotlib
- 파이썬
- Apache
- Google Excel
- PostgreSQL
- Excel
- PySpark
- string
- Java
- Redshift
- c#
- hive
- django
- google apps script
- Today
- Total
달나라 노트
Java - 2개의 class 선언, 객체 parameter 본문
class Increment {
public void increment(int x) {
x = x + 10;
}
}
public class JavaClass {
int x = 0;
public static void main(String args[]) {
JavaClass test = new JavaClass();
System.out.println(test.x);
Increment inc = new Increment();
inc.increment(test.x);
System.out.println(test.x);
}
}
-- Result
0
0
위 코드에서 봐야 할 것은 2가지 입니다.
첫 번째.
하나의 파일에 2개의 class가 적혀있습니다.
이것은 가능합니다. 다만 public 키워드를 붙이는 class는 파일명과 동일한 JavaClass이어야 합니다.
(public 키워드는 파일명과 동일한 class에게만 붙여야 합니다.)
두 번째.
test method에 존재하는 x는 0이라는 값을 가질 것입니다. -> 첫 번쩨 println에서는 0 출력
그리고 이 값을 inc의 increment method를 이용하여 10을 더합니다. -> 여기서도 0 출력
왜 이럴까요? 분명히 10을 더헀는데 말이죠.
이 사유는 어떤 method안에 전달된 값은 동일한 변수명을 가진다고 할지라도 그 method 안에서만 유효합니다.
즉 increment건 test건 모두 x값을 가지고 있거나 x에 10을 더하고있지만 이 두 x는 어느 class에 속해있는지에 따라 다릅니다.
class Increment {
public int increment(int x) {
return x + 10;
}
}
public class JavaClass {
int x = 0;
public static void main(String args[]) {
JavaClass test = new JavaClass();
System.out.println(test.x);
Increment inc = new Increment();
test.x = inc.increment(test.x);
System.out.println(test.x);
}
}
-- Result
0
10
만약 inc의 결과를 test object에 있는 x값에도 반영시키고있으면 크게 두 가지 방법이 있습니다.
첫 번째로 위 코드를 보면 increment에 return을 사용하는 것입니다.
그러면 10을 더한 값이 return되고 이것을 다시 test.x에 할당하고 있습니다.
class Increment {
public void increment(JavaClass test) {
test.x = test.x + 10;
}
}
public class JavaClass {
int x = 0;
public static void main(String args[]) {
JavaClass test = new JavaClass();
System.out.println(test.x);
Increment inc = new Increment();
inc.increment(test);
System.out.println(test.x);
}
}
-- Result
0
10
두 번째는 increment의 parameter가 어떤 값이 아닌 객체를 전달받도록 하는 것입니다.
increment를 보면 Parameter가 JavaClass test라고 적혀있습니다.
이것의 뜻은 increment method는 JavaClass라는 class의 test 객체를 parameter로서 받는다는 뜻입니다.
그래서 increment의 코드블럭을 보면 test.x = test.x + 10으로 적어서 test 객체의 x에 10을 더하게 됩니다.
그리고 inc.increment(test)부분을 보면 아까처럼 test 객체의 x값이 아닌 test 객체 자체를 parameter로서 전달하고 있음을 볼 수 있죠.
'Java' 카테고리의 다른 글
Java - class의 상속 (0) | 2021.03.14 |
---|---|
Java - ArrayList (0) | 2021.03.13 |
Java - object (객체) (0) | 2021.03.13 |
Java - Recursion (0) | 2021.03.12 |
Java - Scope (0) | 2021.03.12 |