
메서드에 특정한 값을 전달하는 방법은?
우리는 메서드에 어떠한 값을 전달하는 방법으로 주로 인자를 통해 데이터를 전달해주는 것을 자주 사용한다.
나 또한 언제나 이러한 방식으로 데이터를 전달해 왔다.
그러다 보니 메서드에 특정한 값을 전달하는 방법이 이것 뿐이라는 착각을 하게 되었고 뭔가 인자를 주렁주렁 달고 있는 것 자체가 불편해 보이기 시작했다.
물론 이게 읽기 쉽고 이해하기 쉬운 것은 동의한다.
하지만 가끔 그런날이 있지 않은가?
정론이고 원래 하던 일이라 해도 갑자기 하기가 싫고, 마음에 안 드는 날이 있다.
나는 오늘 코딩을 하면서 이런 것을 느낀 것 같다.
자 그럼 내가 생각해본 메서드에 데이터를 전달하는 다른 방법에 대해 설명해 보겠다.
그렇다면 우선 알아야할 것이 있는데 static 즉 정적 변수이다.
static 변수 즉 정적 변수는 같은 클래스에 있지만 클래스 전역에서 사용할 수 있는 변수 즉 클래스 변수라고 한다.
이는 간단하게 클래스에 속해 있되 메모리 영역에서 저장되는 위치가 다르다. 다른 변수와는 다르게 컴파일이 될 때 바로 할당이 되고 메모리에 저장이된다.
또한 같은 클래스내의 범위에 속해있는 요소들은 자유롭게 해당 변수를 호출할 수 있다,
위에서 나는 클래스 변수는 메모리 영역에서의 저장 위치가 다르다고 말을 했다.
그렇다면 클래스 변수는 클래스에 왜 있는 것인가? 라는 생각을 할 수 있다.
이를 쉽게 표현해서 코드상에서 해당 변수를 사용하기 위해 자리를 빌려쓰고 있다고 생각하면 이해가 쉽다. 자리를 빌려쓰면 댓가를 줘야하는데 이 댓가로 해당 클래스에서 변수를 자유롭게 호출 할 수 있는 권한을 제공하는 것을 주게 된다.
그럼 이런 생각이 들 수 있다.
엥>?? 상속받을 때 static 선언된 것들도 같이 상속을 받는데요!!
음.... static 선언된 것들은 상속이 되지 않는다. 다만 자리를 빌려쓰는 댓가를 상속해 주는 것이다.
이를 건물주와 세입자로 비교하면 쉽게 이해가 간다.
건물주에게 세입자가 방을 빌려 쓰는 댓가로 소정의 금품을 제공한다. 이를 자신을 호출할 수 있는 권한이라고 가정하자.
건물주가 나이가 먹어서 자식에게 자신의 건물을 상속해주려고한다. 그렇다면 세입자는 당연히 상속받은 자식에게 지금까지 건물주에게 제공하던 댓가를 제공해야한다. 이렇게 생각하면 어떤가 이해가 확 잘 되지 않는가?
그렇다면 나는 왜 static 변수 즉 클래스 변수를 이야기 했을까???
내 처음 궁금증은 같은 클래스 내의 메서드라는 것에 주목해 보자.
static 변수는 같은 클래스 내의 다른 메서드들도 쉽게 접근 및 변경이 가능하다.
class TestStatic{
public static void main(String[] args){
printText("안녕하세요 저는 블로깅을 처음하는 초보 개발자입니다. 띄 어 쓰기 이 상하게 해 버리 기");
String str = "열 받으 시는느 낌 띄어 쓰 기 고 치고 싶 죠?";
printText(str);
}
public static void printText(String str){
System.out.println(str);
}
}
위의 코드는 가장 일반적으로 메서드에 데이터를 전달하는 방식을 표현하고 있다.
문자열을 전달할 것인데 하나는 바로 적기 ! 두번째는 따로 변수를 통해 제어하기
이중 보통 2번째 방법을 많이 사용한다.
Why?
많은 부분을 일괄적으로 고쳐야 할 때 파라메타에 직접 내용을 적으면 하나하나 수정해야할 것이다.
근데 이게 양이 10줄 정도만 되어도 귀찮을 텐데 100000줄이라고 가정하자. 코드를 요상하게 짠 전임 사람 혹은 나를 원망할 것이다.
static 변수를 활용한 데이터 전달
class TestStatic{
private static String str ="";
public static void main(String[] args){
str = "오늘하루도 블로깅으로 재 미있는짓 하고있 다";
printText();
str = "이제 끝이보인다.";
printText();
}
public static void printText(){
System.out.println(str);
}
}
이 코드를 보자. 음 일단 들여쓰기는 내가 블로깅 기술이 부족해서인지 계속 이상하게 작동이 되어 양해해주시길 바랍니다.
일단 위의 코드를 보면 static으로 한번에 정리 한 것을 볼 수 있다.
이를 통해 우리는 무엇을 알 수 있는가???
우리는 이를 통해 static을 사용한다면 같은 클래스 내에 있는 메서드에 인자를 사용하지 않고 데이터를 전달 할 수 있다는 것을 알게 되었다.
결론
내가 생각하고 찾아본 방식이 실용성이 없을 수도 있다. 하지만 저런 것이 가능하다는 것을 알고 있는것과 모르고 있는 것은 차이가 크다고 생각한다.
오늘도 반걸음 개발자가 되기 위해 전진하고 있는 나를 칭찬해본다.
'이전 학습 내용' 카테고리의 다른 글
| Framework (0) | 2022.12.06 |
|---|---|
| 띠용~~ 인터페이스와 오버로딩 (0) | 2022.12.04 |
| 오늘의 띠용@!@(네스트 클래스 테스트) (0) | 2022.12.02 |
| NPE (0) | 2022.11.29 |
| 당신이 넣은 값이 이상하게 마지막 반복 결과로 바뀐다면>?(얕은복사 깊은복사) (0) | 2022.11.27 |