본문 바로가기
Java/기초 Java

[기초 자바]public &private static 구조 확실히 알기

by 호두빵 2021. 4. 8.

합을 구해서 반환하는 함수를 호출해봅시다.

 

main01함수에서 우리는 30과 20을 더한 합을 알아내고 싶습니다. 그냥 int sum =30+50;하면 안 되는 건가? 하는 생각이 잠시 스쳐지나가지만 우리는 계산기를 쓰는게 아니라 알아서 계산을 하는 코드를 짜려고 하는 것이기 때문에 add함수를 활용해보려고 합니다.

 

1.첫번째 함수와 두번째 함수의 차이를 잘 살펴봅시다. public과 private이라는 차이점이 첫번째로 눈에 띕니다. public으로 지정해놓은경우 class내에서는 물론, class밖에서도 이 함수에 접근이 가능합니다. 그러나 private은 해당 클래스 안에서만 접근이 가능하다는 차이점이 있습니다.

 

2.static은 단어 본래의 뜻은 '고정된'이라는 뜻이 있습니다. stackoverflow에 어떤 사람이 대체 이게 무슨 말인지 모르겠으니 누가 쉽게 설명 좀 해줘라~ 하는 글을 올렸는데 그 곳에 달린 답글을 보면 static이 붙은 변수나 함수는 class level에서 접근이 가능하다고 합니다. 다. 쉽게 말해서 해당 변수나 함수에 접근하기 위해서 또 하나의 class를 만들지 않아도 된다는 것이다.

 

3.void는 반환하는 값이 없을 때 쓰입니다. 반면에 두번째 private 함수는 더한 값을 반환해줘야 하기 때문에 void가 아님을 확인할 수 있겠습니다.

 

첫번째 main함수에서는 mainValue값을 10으로 줬다. edit 01함수를 먼저 들여다보면, edit이 할 수 있는 일은 값을 복사해서 고대로 여기 있습니다~하고 전달해주는 수밖에 없습니다. 왜냐하면 애초에 main에서 edit01로 준 것도 (int mainValue)인데 이는 변수를 전달한 것이 아니라 변수안의 값을 전달한 것이기 때문입니다. 이때까지만 해도 마치 갑을관계처럼 edit01함수는 main함수의 말만 따라야 합니다. 그러므로 edit01의 첫번째 mainValue는 똑같이 10이 됩니다. 아무리 edit01함수에서 mainValue는 20이라구요!!! 외쳐도 소리없는 아우성일뿐입니다. edit은 단순히 값을 복사해주는 역할밖에 하지 못하기 때문에 return mainValue;를 하지 않으면 아무리 용을 써도 mainValue=20은 edit01에만 남아있습니다. 그러나 을도 가끔은 반란을 꿈꿉니다. mainValue를 미친듯이 바꿔버리고 싶다... 그런 경우에는 edit02의 경우처럼 전달받은 값을 일단 처리한 다음에 바뀐 결과 값을 반환합니다.