06 변수와 메서드

선언위치에 따른 변수의 종류

○ 멤버 변수를 제외한 나머지 변수들은 모두 지역변수

 

1) 인스턴스 변수

클래스 영역에 선언

클래스의 인스턴스를 생성할 때 만들어짐

인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 인스턴스 먼저 생성해야 함

인스턴스는 독립적인 저장공간 가짐

인스턴스이름.멤버변수명

2) 클래스 변수

인스턴스 변수 앞에 static 붙이면 됨

모든 인스턴스가 공통된 저장공간을 공유하게 함(공통된 변수를 사용하게 함)

인스턴스를 생성하지 않아도 언제나 사용 가능

클래스명.클래스변수명

클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때 까지 유지

전역변수의 성격을 가짐

3) 지역 변수

메서드 내에 선언되어 메서드 내에서만 사용 가능

메서드 종료되면 소멸되어 사용할 수 없음

■ { }(블록) 안에 선언하고, 블록 안에서만 사용 가능

 

메서드

○ 메서드 : 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것

○ 선언과 구현

메서드를 정의한다 : 메서드의 선언부와 구현부를 작성한다

반환타입 메서드이름 (타입 변수명, 타입 변수명, …){

           메서드 호출 시 시행될 부분

}

선언부 : 메서드 이름, 매개변수 선언, 반환 타입

매개변수 선언 : 매개변수도 메서드 내에 선언된 것으로 간주 -> 지역변수!

이름 : 변수의 명명규칙대로 작성

반환타입 : 메서드 작업수행 결과(출력)반환값의 타입

반환값이 없는 경우 void

구현부

■ return : 작업을 수행한 결과인 반환값을 호출한 메서드로 전달

전달받는 곳과 전달하는 값의 타입이 일치하거나 자동 형 변환 가능한 것이어야 함

지역변수 : 메서드 내에 선언된 변수들은 그 메서드 내에서만 사용 가능

 

○ 호출

메서드이름{1, 2,…};

인자 & 매개변수

인자 : 메서드 호출할 때 괄호 안에 지정해준 값

인자의 개수와 순서 = 호출된 메서드에 선언된 매개변수의 개수와 순서

인자의 타입 = 매개변수 타입 or 자동 형 변환 가능한 타입

인자는 메서드가 호출되면서 매개변수에 대입됨

 

메서드의 실행흐름

같은 클래스 내의 메서드끼리는 참조변수 사용하지 않고 서로 호출 가능

□ static 메서드는 같은 클래스 내의 인스턴스 메서드 호출 불가능

→ static 메서드는 언제나 로딩되어 있지만 인스턴스 메서드는 인스턴스가 생성되어야 로딩되므로 언제나 사용할 수 있다는 보장이 없음

메서드가 호출되면 지금까지 실행되던 메서드는 실행을 잠시 멈추고 호출된 메서드 실행

다 끝나면 복귀해서 기존 메서드 수행됨

한 메서드의 결과를 출력하는 데 다른 메서드의 결과가 먼저 계산되어야 한다면 먼저 호출된 값보다 먼저 나중에 호출된 메서드가 수행되어 출력될 수 있음

 

return

현재 실행중인 메서드를 종료하고 호출한 메서드로 복귀

반환값 유무에 상관없이 존재해야 하지만 void타입인 경우 컴파일러가 자동으로 return 넣어줌

반환값 : 주로 변수가 오지만 수식도 써도 됨

○ 매개변수 유효성 검사

매개변수 값이 적절한 것인지 확인하는 것이 중요

타입만 맞으면 어떤 값도 매개변수를 통해 넘어올 수 있음

가능한 모든 경우의 수에 대해 고민하고 대비하는 코드 짜야 됨

적절하지 않은 값이 넘어오면

매개변수 값을 보정하던가

불가능 하면 return문 사용해서 작업 중단하고 호출한 메서드로 돌아가야 함

 

● JVM 메모리 구조

 ○ 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당 받음

○ 메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거

○ 호출 스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드

○ 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드

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

○ 기본형 매개변수 : 변수의 값을 읽기만 할 수 있음(read only)

기본형 값이 매개변수에 복사되어 넘겨줌

메서드 안에서 변수 값이 변경되어도 원본은 멀쩡

○ 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있음 (read & write)

값이 저장된 곳의 주소가 매개변수에 복사되어 넘겨줌

 

참조형 반환 타입

○ 참조형 반환타입 값 : 객체의 주소!

 

재귀호출

○ 메서드 자신을 다시 호출하는 것

○ 무힌반복문처럼 조건문을 필수로 사용해야 함

○ 어떤 작업을 반복적으로 처리할 때 반복문이 너무 복잡하면 재귀호출로 간단히 할 수 있나 고민

논리적 간결함이 있음

○ 재귀호출에 드는 비용보다 재귀호출의 간결함이 더 클 때 사용해야 함

반복문보다 재귀호출문의 수행시간이 더 김

○ 스택오버플로우 : 너무 작거나 큰 값이 재귀호출의 인자로 들어가면 발생

매개변수 유효성 검사가 중요!

 

클래스 메서드와 인스턴스 메서드

○ 메서드 앞에 static 붙으면 클래스 메서드, 없으면 인스턴스 메서드

○ 인스턴스 메서드 : 인스턴스 변수와 관련된 작업을 함

메서드의 작업을 수행하는 데 인스턴스 변수를 필요로 하는 메서드

인스턴스명.멤버변수명

○ 클래스 메서드 : 인스턴스와 관계없는 메서드(인스턴스 변수나 메서드 사용 안 하는 메서드)

클래스이름.클래스메서드이름

○ 멤버변수 : 클래스 영역에 선언된 변수

클래스 변수 : static 붙은 멤버변수

인스턴스 변수 : static 안 붙은 멤버변수

○ 모든 인스턴스에 공통으로 사용되는 것에 static 붙임

멤버변수 중 모든 인스턴스에 공통된 값을 유지해야 하는 것에 static 붙임

○ 클래스 변수는 인스턴스 생성 없이 사용 가능

○ 클래스 메서드는 인스턴스 변수를 사용할 수 없음

○ 메서드 내에 인스턴스 변수 사용하지 않으면 static 붙이는 것을 권장

 

클래스 멤버와 인스턴스 멤버간의 참조와 호출

○ 같은 클래스에 속한 멤버들 간에는 인스턴스 생성 없이 서로 참조, 호출 가능

○ 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재

but, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있음

클래스 멤버가 인스턴스 멤버 참조, 호출하고자 하는 경우 인스턴스 생성해야 함

○ 참조변수를 선언하지 않고 생성된 인스턴스는 한 번 사용 후 사용할 수 없음

 

오버로딩

○ 오버로딩 : 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것

○ 오버로딩의 조건

(1)   메서드 이름이 같아야 함

(2)   매개변수의 개수 또는 타입이 달라야 함

오버로딩 된 메서드들은 매개변수에 의해서만 구별 가능

반환 타입은 오버로딩 구현에 영향 없읍! 무조건 매개변수!

○ 가변인자와 오버로딩

가변인자 : 메서드의 매개변수 개수를 동적으로 지정하는 것

타입 변수명 <- 선언

가변인자 외에도 매개변수 더 있다면 가변인자를 매개변수 중에서 제일 마지막으로 선언해야 함

내부적으로 배열을 이용함

가변인자가 선언된 메서드 호출할 때마다 배열이 새로 생성

매개변수 타입을 배열로 하면 반드시 인자를 지정해줘야 되기 때문에 인자 생략 불가능

가변인자를 선언한 메서드를 오버로딩하면 메서드를 호출했을 때 구별되지 않는 경우가 있음

하지 않는 것이 좋다

 

 

 

+ Recent posts