Variable 과 Method
변수(variable)는 다음 세 가지 종류가 존재함을 기억하도록 하자.
1. Class variable
2. Instance variable
3. Local variable
다른 프로그래밍 언어들과 마찬가지로 변수의 종류를 결정짓는 요소는 "변수가 선언되는 위치" 이다.
이 각각의 변수들을 구분하고자 할 때에는 다음의 기준을 적용해서 구분하면 된다.
member variable을 제외한 나머지 변수들 모두 local variable 이며, member variable 중 static이 붙은 것은 class variable, 붙지 않은 것은 instance variable에 해당
아래의 예시 코드를 보면 위의 기준을 통해서 각 변수들을 어떻게 구분할 수 있는 지 이해할 수 있을 것이다.
class Fish
{
int var1; // instance variable
static int var2; // class variable
void move() {
int var3 = 0; // local variable
}
}
그리고 여기서 각 variable들을 특징을 정리해보면 다음과 같다.
변수 종류 | 선언 위치 | 변수 생성시기 |
class variable | class 영역 | class가 memory에 load 될 때 |
instance variable | instance가 생성되었을 때 | |
local variable | class 영역 이외의 영역 (method, constructor 등) |
variable 선언문이 수행되었을 때 |
instance variable
class의 영역에 선언되며, class의 instance를 생성할 때 만들어진다. 이러한 이유 때문에 intace variable을 사용하기 위해서는 우선 class에 대한 instance를 생성해야한다. 또한 instance는 각각 메모리 상에서 독립적인 공간을 차지 하기 때문에 동일한 class에 대해서 여러 개의 instance가 선언되었더라도 각각의 instance variable은 서로 다른 값을 가질 수 있다. 그래서 각 instance 별로 고유하게 유지해야하는 값인 경우, 이러한 값을 instace variable을 통해서 다루게 된다.
class variable
class variable은 단지 instance variable 앞에 "static" keyword를 붙여주는 것으로 간단하게 만들어낼 수 있다. 이전에 각 instance에 따라 모두 독립적인 메모리 공간을 차지했었던 instance variable과 달리, class variable은 모든 instance가 동일한 메모리 공간을 공유해서 사용한다는 특징이 있다. 그래서 class variable의 경우 모든 instance들이 동일한 값을 유지하고 이를 서로 공유해서 사용해야하는 경우 유용하게 사용할 수 있다.
또한 class variable은 class에 대한 instance 생성 없이 바로 사용이 가능하며 "className.varName"의 형식으로 접근하여 사용할 수 있다. class variable은 해당 class가 memory에 load되는 시점에 생성되어 프로그램이 종료될 때까지 유지되며, 앞에 "public" keyword를 붙여 선언하는 경우 같은 프로그램 내 어디에서나 접근할 수 있는 "global variable"의 성격을 가지게 된다.
local variable
method 내에서 선언되어 method 내에서만 그 효력을 나타내는 변수이다. 즉, 해당 method가 실행되는 순간 생성되고, 종료되는 순간 없어지는 변수이다.
Method
특정 logic을 수행하는 code 문장들을 하나로 묶은 것
method의 경우 input과 ouput이 둘다 있거나, 둘 중 하나만 있을 수도, 그리고 아얘 없을 수도 있다. 이러한 정의들을 통해서 느낄 수 있었겠지만 c언어에서 사용되는 function의 개념과 유사하다. 여기서 중요한 것은 method를 사용하는 이유를 이해하는 것이다.
method를 사용하는 이유
1. 높은 reusability
- 일단 method를 한 번 잘 정의해두면, 동일한 로직을 수행할 필요가 있는 상황에 대해서 해당 method를 호출함으로서 간단하게 이를 처리할 수 있다.
2. 중복되는 코드의 제거
- 프로그램 작성 시 발생할 수 있는 중복되는 코드라인들을 하나의 method로 묶어서 구성함으로서 많은 라인의 코드를 한 줄의 method 호출문으로 대체할 수 있고, 이를 통해 코드에 대한 가독성 향상 및 실수를 줄일 수 있다.
3. 프로그램의 구조화
- 어떠한 목적을 달성하기 위한 로직을 구현할 때 필요한 각 작업의 단위들을 method로 나누서 구현함으로써 프로그램을 구조화할 수 있으며, 이를 통해 프로그램의 가독성을 높이고, 유지보수를 용이하게 할 수 있다.
여기서 중요한 점은 main method 에서는 프로그램의 전체 로직이 쉽게 파악될 수 있을 정도로 단순하게 구조화하는 것이 중요하다는 것이다. 그래서 이를 위해 우선 작업의 단위를 먼저 나눠서 빈 method들을 선언해두고, 각각에 대한 세부 logic들을 채워나가면서 프로그램을 구현하는 것도 프로그램을 구조적으로 잘 작성하기 위한 하나의 방법이 된다.
return 문
사실 method가 return 값을 가지는 지 가지지 않는 지에 관계없이 사실 java에서 모든 method는 적어도 한 개 이상의 return 문을 가진다. 하지만 실제로는 return type이 void인 method에 대해서는 return 문이 사용되지 않는 경우가 많은데 사실 이러한 경우도 컴파일시 컴파일러에 의해 method의 마지막 부분에 "return;"문이 추가되는 것이지 return문이 필요없는 것이 아니다.
parameter에 대한 유효성 검사
실제로 우리가 어떤 method를 구현할 때 명심할 것은 우리가 구현한 method를 사용할 때 "항상 method에서 구현한 logic에서 정의하는 domain에 부합하는 parameter만 들어올 것이라고 함부로 가정하면 안된다는 것"이다. 그렇기 때문에 다양한 상황에 대해서도 잘 대비가 되어있는 안정적인 프로그램을 작성하기 위해서는 이와 같이 parameter를 수용하는 각 method들에 대해서 적절한 유효성 검사를 수행하는 로직을 초반에 작성해주는 것이 대단히 중요하다.
'Web Backend > Java' 카테고리의 다른 글
gson 라이브러리를 사용한 파일 입출력 기능 구현하기 (0) | 2021.07.19 |
---|---|
JVM의 메모리 구조 (0) | 2021.07.03 |
Class와 Object (0) | 2021.06.29 |
OOP(Object Oriented Programming language) 개념 (0) | 2021.06.29 |
Java 에 대한 기본적인 정리 (0) | 2021.06.29 |
댓글
이 글 공유하기
다른 글
-
gson 라이브러리를 사용한 파일 입출력 기능 구현하기
gson 라이브러리를 사용한 파일 입출력 기능 구현하기
2021.07.19 -
JVM의 메모리 구조
JVM의 메모리 구조
2021.07.03 -
Class와 Object
Class와 Object
2021.06.29 -
OOP(Object Oriented Programming language) 개념
OOP(Object Oriented Programming language) 개념
2021.06.29