자바/자바 복습 되새김질

자바 복습. this() 참조 변수 사용

Tomitom 2022. 10. 27. 17:34
반응형

 

복습

https://blue-dot.tistory.com/57

 

자바 기초 공부 일지 15. 메소드 오버로딩, this 참조 변수

● 메소드 오버로딩이란 같은 이름의 메소드를 중복으로 만들 때를 의미합니다. 자바에서 한 클래스에 같은 이름의 메소드를 두 개 이상 받을 수 없지만, 매개변수의 개수 혹은 타입을 다르게

blue-dot.tistory.com

 

인생을 몇 년차를 살든 우리에게 필요한 것과 잃으면 안되는 것에 대한 것을 클래스와 메소드를 활용해서 작성해볼게요. 

this() 를 기필코 쓰겠다. 

 

처음에 이렇게 작성했을 때에는 문법적으로는 맞지만 값에 오류가 떴어요. 

자꾸만... 0년차를 살게 되는 거예요. 

 

package day14;


class FeelingSoGood{
	
	public int a;
	public void myage(int a) {
		this.a = a;		
	}

	public void love(String n) {
		System.out.println("인생 "+ a + "년차, 필요한건 "+ n + "이야.");
	}
	public void fire(String f) {
		System.out.println("우리가 잃으면 안되는 것은 " + f + "이야.");
	}
}
	
public class Test05 {

	public static void main(String[] args) {
		
		FeelingSoGood good = new FeelingSoGood();
		
		good.love("사랑");
		good.myage(5);
		good.fire("열정");
			}
		}

 

왜 자꾸 태어나질 못하니..

 

이렇게요... 왜 자꾸 0년차밖에 살지 못하나 했어요... 

그런데 이것은 작성의 순서가 잘못 작성되었기 때문이에요. 

FeelingSoGood good = new FeelingSoGood(); 

의 새로운 good 인스턴스가 생성되면서 그 안의 메소드를 순차적으로 실행하는데 

 

myage 의 순서가 love의 아래에 있었기 때문입니다. 

love 메소드가 먼저 실행되었기 때문에 그 안에 있는 참조변수 a의 값은 

아직까지 int a 의 상태이기 때문에 0의 값이 출력됩니다. 

 

그렇기 때문에 순서적으로 myage를 사랑의 위로 올리고 

myage 의 값이 적용이 된 후에 love를 출력해야 그 값이 반환 됩니다. 

 

 

 

package day14;


class FeelingSoGood{
	
	public int a;
	public void myage(int a) {
		this.a = a;		
	}

	public void love(String n) {
		System.out.println("인생 "+ a + "년차, 필요한건 "+ n + "이야.");
	}
	public void fire(String f) {
		System.out.println("우리가 잃으면 안되는 것은 " + f + "이야.");
	}
}
	
public class Test05 {

	public static void main(String[] args) {
		
		FeelingSoGood good = new FeelingSoGood();
		
		good.myage(5);
		good.love("사랑");
		good.fire("열정");
			}
		}

드디어 5년을 살았다...

 

자바와 파이썬을 공부한지 14일 째 ... 여전히 모르는 것은 투성이지만 하나씩 해봅니다. 

 

package day14;


class FeelingSoGood{        // 느낌 좋아보이는 클래스 생성
   
    public int a;
    public void myage(int a) {      // 참조변수 int a를 갖는 myage 클래스 생성
        this.a = a;                 // a의 값은 자기 자신인 a의 값을 가집니다.
                                    // 그렇기 때문에 int a에 값을 주면 변수 a는 동일한 변수 이름으로 그 값을 취해요.
    }

    public void love(String n) {
        System.out.println("인생 "+ a + "년차, 필요한건 "+ n + "이야."); // a 변수가 참조되어야 하기 때문에 a를 반환하는 myage 메소드는 love 메소드보다 상위에 있어야 합니다.
    }
    public void fire(String f) {
        System.out.println("우리가 잃으면 안되는 것은 " + f + "이야.");
    }
}
   
public class Test05 {

    public static void main(String[] args) {
       
        FeelingSoGood good = new FeelingSoGood(); // 느낌 좋은 클래스를 찍어서 느낌 좋은 인스턴스를 만들어냅니다.
       
        good.myage(5);      // 와플 기계처럼 느낌 좋은 와플들을 만들어내요.
        good.love("사랑");
        good.fire("열정");
            }
        }
       

 

>> 인생 5년차, 필요한건 사랑이야.
우리가 잃으면 안되는 것은 열정이야. << 

 

 
반응형