변수와 메서드

12068 단어 JavaJava

1. 변수(variable)

🔷 변수의 종류

영역은 클래스 영역과 메서드 영역으로 나눌 수 있고, 변수가 선언된 영역에 따라서 변수의 종류를 구분할 수 있다.

class Variables{
/* 클래스 영역 */
   int iv; // 인스턴스 변수 
   static int cv; // 클래스 변수(static변수)

   /* 메서드 영역 */
   void method(){
       int lv = 0; // 지역변수
   /* 메서드 영역 끝 */
   }
/* 클래스 영역 끝 */
}   

🔷 클래스 변수와 인스턴스 변수

🔹 클래스 변수

인스턴스 변수 앞에 static만 붙이면 된다.
모든 인스턴스가 공통된 저장공간을 공유한다.
한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 속성
인스턴스를 생성하지 않고 바로 사용할 수 있다. ➡️ 클래스이름.클래스변수
앞에 public을 붙이면 프로그램 내 어디서든 사용할 수 있는 전역변수(global variable)의 성격을 갖는다.
예) 카드의 크기(가로, 세로)

🔹 인스턴스 변수

클래스 영역에서 선언되고, 인스턴스를 생성할 때 만들어진다.
인스턴스 변수에 값을 저장하거나 가져오려면 인스턴스를 먼저 생성해야한다.
예) 카드의 무늬, 숫자

class Card{
	// 인스턴스 변수
    String kind;
    int number;
    // 클래스 변수
    static int width = 100;
    static int height = 200;
}

2. 메서드(method)

🔷 메서드란

특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것
(하나의 메서드는 하나의 기능만 넣는 것이 좋다.)

🔷 메서드를 사용하는 이유

🔹 1. 높은 재사용성

한 번 만들어 놓은 메서드는 몇 번이고 호출할 수 있을 뿐 아니라 다른 프로그램에서도 사용가능하다.

🔹 2. 중복되는 코드 제거

🔸 코드를 짜다보면 같은 코드를 중복해서 쓰는 경우가 있는데 이런 코드들을 하나로 묶어서 메서드로 만들어서 사용하면 코드의 길이도 짧아진다.
🔸 또한 나중에 수정할 경우 수정해야할 코드도 줄어들게 되고 수정으로 인한 오류의 가능성도 낮아진다.

🔹 3. 구조화

작업을 할 때, 여러개의 메서드를 사용하여 프로그램의 구조를 단순화 시키는 것이 필수.
1. 설계 시 내용 없는 메서드를 작업단위로 만든다.
2. 만들어 놓은 메서드들을 하나씩 구현해간다.

🔷 메서드의 구조

선언부(header)와 구현부(body)로 이루어진다.

🔹 선언부

[반환타입][메서드 이름][매개변수 선언]

🔸 반환타입 : 반환하는 값의 타입을 적는다. 없는 경우 void.
🔸 메서드 이름 : 메서드의 이름은 동사로 작성하는 경우가 많고, 이름만으로 메서드의 기능을 유추할 수 있도록 짓는 것이 좋다.
🔸 매개변수: 작업에 필요한 값들을 제공받기 위한 것이다.

🔹 구현부

{}안에 들어가는 내용을 모두 구현부라고 한다.
반환타입이 void가 아닌 경우를 제외하고 모두 return문이 있어야 한다.
메서드 내에 선언된 변수들은 해당 메서드 내에서만 사용할 수 있다.(지역변수라고 부른다.)
➡️ 같은 메서드 내에서 같은 변수의 이름은 사용할 수 없지만, 메서드가 다르다면 변수의 이름이 같아도 사용가능하다.

/* 선언부 */
int add(int a, int b){ 
/* 구현부 */
    int result = x + y; // 메서드 구현 
    return result; // 반환값

🔹 호출

메서드를 사용하기 위해서는 먼저 정의를 한 후, 호출을 해야 사용할 수 있다.
메서드 호출 시, 정의된 메서드의 {}안에 구현된 코드들이 실행된다.

public static void main(String args[]){
    int result = add(3, 5);
   
    // add메서드
    int add(int a, int b){
    ...
    }
}

🔸 같은 클래스 내의 메서드는 참조변수를 사용하지 않고 호출이 가능한다.
하지만 static메서드는 같은 클래스 내의 인스턴스 메서드를 호출, 사용할 수 없다.
➡️ 인스턴스 객체의 생성 여부를 알 수 없기 때문이다.

🔷 매개변수

메서드를 호출할 때, 매개변수로 지정한 값을 복사해서 넘겨준다.
➡️ 기본형일 때는 값이 복사, 참조형일 때는 인스턴스의 주소가 복사된다.
🔸 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.
🔸 참조형 매개변수 : 변수의 값을 읽고, 수정할 수 있다.

🔹 기본형 매개변수

class Data{
    int x;
}
class PrimitiveParam{
    public static void main(String args[]){
        Data d = new Data;
        d.x = 10; // d.x = 10
        change(d.x); change(d.x) = 1000
        // 참조변수 없이 메서드를 사용한 이유 
        // 1. static메서드라서
        // 2. 같은 클래스라서
        System.out.println(d.x) // d.x = 10
    }
    static void change(int x){
        x = 1000;
}

🔹 참조형 매개변수

class Data {
    int x;
}
class ReferencesParam{
    public static void main(String args[]){
        Data d = new Data;
        d.x = 10; // d.x = 10
        change(d); // chagne(d.x) = 1000
        System.out.println(d.x) // d.x = 1000
    }
    static void change(Data d){
        d.x = 10000;
    }
}    

좋은 웹페이지 즐겨찾기