Java
[Java] 변수와 메서드
gorusair
2022. 1. 5. 23:34
class Variable
{
int iv; // 인스턴스 변수
static int cv; //클래스 변수(static 변수, 공유변수)
void method()
{
int lv = 0; //지역변수 --- 메서드 영역
}
}
1. 인스턴스 변수
클래스 영역에서 선언되며, 클래스의 인스턴스를 생성할 떄 만들어진다.
인스턴스의 변수의 값을 읽어 오거나 저장하기 위해서는 인스턴스를 생성해야 한다.
인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
인스턴스 마다 고유한 상태를 유지해야 하는 속성의 경우, 인스턴스 변수로 선언한다.
2. 클래스 변수
클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 붙이기만 하면 된다.
모든 인스턴스가 공통된 저장공간을 공유하게 된다.
한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우, 클래스 변수로 선언
3. 지역 변수
매서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없다.
class CardTest {
public static void main(String[] args) {
System.out.println("Card.width = " + Card.width);
System.out.println("Card.height= " + Card.height);
Card c1 = new Card();
c1.kind = "Heart";
c1.number = 7;
Card c2 = new Card();
c2.kind = "spade";
c1.number =4;
System.out.println("c1은" +c1.kind + ", " + c1.number +
"이며, 크기는("+c1.width +", "+c1.height+")");
System.out.println("c2은" +c2.kind + ", " + c2.number
+ "이며, 크기는("+c2.width +", "+c2.height+")");
System.out.println("c1의 width와 height를 각각 50,80으로 변경합니다.");
c1.width =50;
c1.height =80;
System.out.println("c1은" +c1.kind + ", " + c1.number
+ "이며, 크기는("+c1.width +", "+c1.height+")");
System.out.println("c2은" +c2.kind + ", " + c2.number
+ "이며, 크기는("+c2.width +", "+c2.height+")");
}
}
class Card{
String kind;
int number;
static int width =100;
static int height = 250;
}
Card.width = 100
Card.height= 250
c1은Heart, 4이며, 크기는(100, 250)
c2은spade, 0이며, 크기는(100, 250)
c1의 width와 height를 각각 50,80으로 변경합니다.
c1은Heart, 4이며, 크기는(50, 80)
c2은spade, 0이며, 크기는(50, 80)
메서드
' 메서드'는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은것
메서드의 선언과 구현
메서드는 크게 두 부분, '선언부'와 '구현부'로 이루어져 있다.
반환타입 메서드 이름(타입 변수명, 타입 변수명 ...) //선언부
{
// 메서드 호출시 수행될 코드 //구현부
}
int add(int a, int b) // 선언부
{
int result = a + b;
return result; //호출한 메서드로 결과를 반환한다. // 구현부
}
public class MyMathTest {
public static void main(String[] args) {
MyMath mm = new MyMath();
long result1 = mm.add(5L, 3L);
long result2 = mm.substract(5L,3L);
long result3 = mm.multiply(5L,3L);
double result4 = mm.divide(5L,3L);
System.out.println("add(5L,3L) =" +result1);
System.out.println("substract(5L,3L) = "+result2);
System.out.println("multiply(5L,3L) =" +result3);
System.out.println("divide(5L,3L)="+result4);
}
}
class MyMath{
long add(long a, long b) {
long result = a+b;
return result;
// return a+b; //위의 두 줄을 이와 같이 한 줄로 간단히 할 수 있다.
}
long substract(long a, long b) {return a-b;}
long multiply(long a, long b) {return a*b;}
double divide(double a, double b) {
return a/b;
}
}
add(5L,3L) =8
substract(5L,3L) = 2
multiply(5L,3L) =15
divide(5L,3L)=1.6666666666666667
return문
return문은 현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아간다.
void print Gugudan(int dan){
for(int i=1; i<=9; i++){
System.out.printf("%d * %d = %d%n", dan, i, dan * i);
}
// return // 반환 타입이 void이므로 생략가능 . 컴파일러가 자동추가
}
int multiply(int x, int y){
int result = x * y;
return result; //반환 타입이 void가 아니므로 생략 불가
}
// if문 조건식에서 return문 사용
int max(int a, int b){
if(a > b)
return a; // 조건식이 참일떄 실행된다.
else
return b; //조건식이 거짓일떄 실행된다.
매개변수의 유효성 검사
매서드의 구현부{ }를 작성할 떄, 제일 먼저 해야하는 일이 매개변수의 값이 적절한 것인지 확인하는 것이다.
float divide(int x, int y){
// 작업을 하기 전에 나누는 수(y)가 0 인지 확인한다.
if(y ==0){
System.out.println("0으로 나눌 수 없습니다.");
return 0; //매개변수가 유효하지 않으므로 메서드를 종료한다.
}
return x / (float) y;
}