JAVA

객체지향 프로그래밍 - 변수와 메소드

HipPopoTamUs 2022. 8. 2. 01:43

변수

변수는 스태틱 변수, 인스턴스 변수, 지역변수로 나뉜다.  변수의 종류를 알려면 '변수가 선언된 위치'를

확인하자. 멤버변수에 스태틱 변수와 인스턴스 변수가 있고, 멤버 변수가 아닌 것들은 지역변수이다.

 

1. 스태틱(클래스) 변수

클래스 영역 안에 선언되며 클래스가 메모리에 로딩될 때 생성, 프로그램이 종료될 때까지 유지된다.

클래스 변수는 모든 인스턴스가 같은 저장공간을 공유하므로, 공통된 값을 유지해야할 때 사용한다.

인스턴스를 생성하지않고도 사용할 수 있다는 특징이 있으며 [참조변수명.클래스 변수] 로 사용할 수도 있지만

이는 인스턴스 변수와 헷갈릴 수도 있으니 [클래스명.클래스 변수]로 사용하자.

 

2. 인스턴스 변수

클래스 영역 안에 선언되며 인스턴스가 생성될 때 만들어진다. 때문에 클래스 변수와 달리, 사용하려면 

먼저 인스턴스를 만들어야한다.  그리고 각각 독립적인 저장공간을 가지므로 서로 다른 값을 저장해야할 때 사용한다.

 

3. 지역 변수

메서드, 생성자, 초기화 블럭 내부 등에서 선언되며 속해있는 블럭이 종료되면 소멸되어 사용할 수 없게 된다.

 

class Car{
    int speed;	//인스턴스 변수
    static int price;	//클래스 변수
   
    void method(){
        int lv = 0; //지역 변수
    }
}

 

메소드

메소드는 재사용이 용이하고 쓸데없이 중복되는 코드를 간결하게 줄일 수 있다.

또한 큰 규모의 프로그램의 main문에서는 전체 흐름이 한눈에 보이도록 구조화하는 것이 중요한데,

이를 위해 작업단위로 문장을 나눌 때 메소드를 사용하면 편리하다.

 

예를 들어 빙고 게임 프로그램의 main문에 모든 코드를 넣는 방식이 아니라,

빙고 판별 메소드, 빙고판 선택 메소드 등을 따로 구현하여 이 메소드들을 main문에 작업 단위로 

쓰는 것이다. 이렇게하면 디버깅도 쉬워지고 구조화가 된 덕분에 보기도 쉽다!

 

반환타입 메소드명 (타입 변수명, 타입 변수명, ...) {      //일반적인 변수선언과 달리 두 변수 타입이 같아도 꼭 타입 써줘야함

    ...구현부 ...

}

파이썬과 달리 return 문에서 단 하나의 값만 반환할 수 있다. 파이썬 그립다

반환값으로는 변수, 수식, 다른 메소드를 호출한 후의 반환값 등이 가능하다.

메소드 내에 선언된 변수들은 지역변수이므로 다른 메소드에서 같은 이름의 변수를 선언해도 된다.

 

메소드를 호출할 때 입력된 인수는 매개변수에 대입되는데, 이때 매개변수의 타입이 double이고

인수의 타입이 long이라면 double x = 5L; 와 같이 되어 5.0으로(double형) 대입된다.