그냥

변수

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

변수의 선언위치가 변수의 종류와 범위를 결정한다.

class var{	
    // 클래스 영역
    int iv;  	    // 인스턴스 변수 (멤버 변수)
    static int cv;  // 클래스 변수 (static변수)
    
    void method(){
    // 메서드 영역
    	int lv = 0; // 지역 변수
    }
}

 

 

인스턴스 변수

클래스 영역

인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지 컬렉터에 의해 자동 제거 된다.

 

클래스변수

클래스 영역

같은 클래스의 모든 인스턴스들이 공유하는 변수.

클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸된다.

 

지역변수

메서드 내에 선언되며, 메서드의 종료와 함께 소멸된다.

 

인스턴스 변수의 접근제어자

public

누구나 접근이 가능하다.

protected

자식들만 접근이 가능하다.

private

외부에서 접근이 안된다.

class dog{
    private String name;  // 인스턴스 변수
    private int age;      // 인스턴스 변수
    private String sex;   // 인스턴스 변수
    
    public void walk(){ }
    public void eat() { }
    public void bark(){ }
    
    public dog(String name, int age, String sex){
    	this.name = name; // 인스턴스 변수 name에 지역 변수 name을 대입
    	this.age = age;   // 인스턴스 변수 age에 지역 변수 age을 대입
    	this.sex = sex;   // 인스턴스 변수 sex에 지역 변수 sex을 대입
    }
}

public class test{
	
	public static void main(String[] args) {
		dog cheeze = new dog("cheeze", 2, "male");
		cheeze.age = 0; // 컴파일 오류
    }
}

따라서 private으로 바꾸면 내부에서만 접근이 가능하다.

 

이때 수정을 어떻게 하는지는 https://just-dooo-it.tistory.com/16 글을 참고하면 된다.

메서드

작업을 수행하기 위한 명령문의 집합

 

장점으로는 반복적인 코드를 줄이고 코드의 관리가 용이하다는 점

반복적으로 수행되는 여러 문장을 메서드로 작성한다.

 

리턴타입 메서드이름 (타임 변수명, 타입 변수명, . . .){

	메서드 호출시 수행될 코드

}

int add (int a, int b){ // 선언부
    int result = a + b; // 구현부
    return result;      // 구현부
}

void power() {
	power = !power;
}

클래스 영역에만 정의할 수 있으며 

반환값이 없는 경우 리턴타입 대신 void를 사용한다.

 

클래스 메서드 (static 메서드)

객체생성없이 '클래스이름.메서드이름()' 으로 호출한다.

인스턴스 변수나 인스턴스 메서드와 관련없는 작업을 하는 메서드이다.

메서드 내에서 인스턴스 변수 사용이 불가하다.

class math1{
    static long add(long a, long b){
    	return a + b;
    }
}

class test{
	public static void main(String[] args) {
	    System.out.println(math1.add(1, 2)); 
    }
}

인스턴스 메서드

인스턴스 생성 후, '참조변수.메서드이름()' 으로 호출한다.

인스턴스 변수나 인스턴스 메서드와 관련된 작업을 하는 메서드이다.

메서드 내에서 인스턴스 변수 사용이 가능하다.

class math1{

	long a, b;
	long add() {
		return a + b;
	}
    
}

class test{
	public static void main(String[] args) {
	    math1 math1 = new math1();
	    math1.a = 10;
	    math1.b = 20;
	    System.out.println(math1.add()); 
    }
}

 

return문

메서드가 정상적으로 종료되는 경우

메서드의 블럭{ }의 끝에 도달 했을 때

메서드의 블럭{ }을 수행 도중 return문을 만났을 때

반환값이 없는 경우

retrun문만 써주면 된다.

return;

반환값이 있는 경우

reutrn문 뒤에 반환값을 지정해 주어야 한다.

return 반환값;
int add (int a, int b){ 
    int result = a + b; 
    return result;      
}

※ 선언부 리턴타입과 구현부 return문 반환값의 타입이 일치해야 한다.

'JAVA 공부 > 객체지향 공부' 카테고리의 다른 글

5. 상속 (2)  (0) 2023.03.18
4. 상속 (1)  (0) 2023.03.18
4. getter와 setter  (0) 2023.03.13
3. 생성자  (0) 2023.03.13
1. 클래스, 객체  (0) 2023.03.12
profile

그냥

@Ticketpaper

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그