Language/Java

4.2 객체 지향 프로그래밍 (변수와 메서드)

리져니 2021. 7. 7. 14:42

변수

종류 위치 생성 시기
클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수 인스턴스가 생성되었을 때
지역 변수 클래스 영역 이외
(메서드, 생성자, 초기화 블럭 내부)
변수 선언문이 수행되었을 때

 

Class Variables{
	int iV	// 인스턴스 변수
    static int cv;	//클래스 변수 (static변수, 공유변수)
    
    void method(){
    	int lv = 0;	//지역변수
    }
}

* static이 붙은 것은 클래스 변수로, 모든 인스턴스가 공유하게 된다. (모든 인스턴스들이 공통적인 값을 유지해야하는 속성인 경우, 클래스 변수로 선언)

 

 

메서드

특정 작업을 수행하는 일련이 문장들을 하나로 묶은 것

 

특징

1. 높은 재사용성

: 한번 만들어 놓으면 몇번이고 호출할 수 있다.

2. 중복된 코드의 제거

: 반복되는 문장들을 하나의 메서드로 작성해 놓으면 코드의 중복 제거가 가능하다

3. 프로그램의 구조화

: 큰 규모의 프로그램에서 문장들을 작업단위로 나눠서 여러 개의 메서드에 담아 프로그램의 구조를 단순화 시킨다.

  * 그래야 나중에 프로그램에 문제가 발생해도 해당 부분을 쉽게 찾아서 해결할 수 있다.

 

메서드의 선언과 구현

메서드 선언부

: 메서드가 작업을 수행하기 위해 어떤 값들을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보 제공

 

메서드 구현부

: 메서드를 호출 했을 때 수행될 코드

  * return문의 반환 값의 타입은 메서드의 반환 타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 한다.

 

 

기본형 매개변수와 참조형 매개변수

메서드의 매개변수를 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에, 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다.

class Data { int x; }

class ReferenceParamEx{
	public static void main(String[] args){
    	Data d = new Data();
        d.x = 10;
        
        change(d);
    }

static void change(Data d){	// 참조형 매개변수
	d.x = 1000;
    }

static void change(int d){ // 기본형 매개변수
	d.x = 1000;
    }
}

* chage매서드의 매개변수가 참조형이 아니라 기본형이라면 d.x=1000;이 인스턴스 d에 반영되지 않고 그대로 d.x = 10;이 된다.

* 배열도 객체와 같이 참조변수를 통해 데이터가 저장된 공간에 접근하므로, 매개변수로 배열이 들어가면 같은 결과를 얻게된다.

 

참조형 반환타입

매개 변수뿐만 아니라 반환타입도 참조형이 될수 있다.

class Data{ int x; }

class ReferenceEx{
	public static void main(String[] args){
    	Data d = new Data();
        d.x = 10;
        
        Data d2 = copy(d);
    }
    
    static Data copy(Data d){
    	Data tmp = new Data();
        tmp.x = d.x;
        
        return tmp;
    }
}

위 코드를 실행하명 d.x = 10, d2.x = 10이 된다

* 반환 타입이 참조형이라는 것은 메서드가 객쳋의 주소를 반환한다는 것을 의미한다.

 

 

728x90