java _ this...

남순식·2022년 11월 14일
2

#this란 무엇인가

나는 개발이란 분야와 멀리있던지라 this라는 기본 개념조차 헷갈렸다.
하지만 정말 어이없게도 내가 자주보던 유튜브 생활코딩에 이고잉님께서 꿈에 나타나 1:1로 이해를 돕기위해 많은 문장과 더 자세한 설명을 해주시더라..
그 꿈은 깨었을지라도 생생하게 기억에 남아 이해를 도와줬다. 그때 들은 지식을 잊지않게 블로그로 남기려고 한다.

Class Calculator {
	int left;
    int right;
    public int sum (int left, int right) {
        left = left;
		righr = right;
        System.out.println(left + right);
    }
}

여기서 클래스멤버 변수명과 메소드의 변수명이 같다.
left = left; (..)
왼쪽에 있는 left는 클래스멤버이다.
오른쪽 left는 Calculator클래스의 sum메소드 매게변수 left이다.

가독성이 떨어져 이상하게 보이기도 한다.

Class Calculator {
	int left;
    int right;
    public void sum (int left, int right) {
        this.left = left;
		this.right = right;
        System.out.println(left + right);
    }
}

클래스 맴버 int left,right; 는 전역에 해당하는 전역변수라 한다.
메서드에서 생성한 변수는 해당 메서드에서만 작용하는 지역변수라 한다.
따라서 이렇게 left앞에 this를 붙혀줌으로써 클래스변수라는것 즉
전역변수 left = 지역함수 left; 를 보여준다.

이렇게 사용한다면,
비슷한 성격에 다른 메소드를 만들었을 때에도 메개변수를 만들어 주어야 한다.

Class Calculator {
	int left;
    int right;
    public void sum (int left, int right) {
        this.left = left;
		this.righr = right;
        System.out.println(left + right);
    }
    public void avg (int left, int right) {
    	this.left = left;
        this.right = right;
        System.out.println((left + right) / 2);
    }
}

이렇게 한다면 main에서 출력할때 사용하려는 메소드 () 안에 매게변수를 입력해 주어야 한다
ex)

	public static void (String[] args){
		Calculator cal = new Calculator();
    	cal.sum(20,30);
        cal.avg(20,30);
	}

합과 평균을 구하는 엄연히 다른 메소드지만
내가만든 Calculator클래스가 클래스자체로 작은 프로그램이라면
Calculator 데이터형식의 cal을 선언했을 때
cal의 sum과 avg는 계산만 다르게 해야 Calculator로 만든 객체 cal 이 또렷해지는 느낌이다.

생성자라는 개념을 사용해보자.

Class Calculator {
	int left, right;
    public Calculator (int left, int right){
    this.left = left;
    this.right = right;
    }
    public void sum () {
        System.out.println(left + right);
    }
    public void avg () {
    	System.out.println(left + right / 2);
    }
}

다른점으로
클래스아래 메소드같은 것이 클래스와 이름이 같다는 것이 중요하다.
생성자라는 개념이다.
생성자에 매게변수를 넣어줌으로써 객체가 완성됐다.
클래스는 붕어빵틀에 비교한다
만든 붕어빵을 객체라할때
붕어빵틀에 팥붕어빵을 만드는 레시피를 사용하는 것과
팥반죽을 틀에넣어 만드는 것의 차이가 있다.(?)
비유는 어디까지나 단번에 이해가안된다면 무시해야한다고 이고잉님께서 말씀해주셨다.
각자 다른 느낌을 받을 수 밖에없고
이는 전달을 방해한다.
전달만 방해할뿐만 아니라 그이상 이해를 어렵게한다.

내가 지금 만든 클래스 Calculator는
숫자를 넣어주고 그숫자끼리의 계산을 해주는 역할 이라고 생각하고 작성했다.
이때, 합과 평균을 구하기 위해서 sum(20,40), avg(20,40) 이렇게 써주어도 좋지만
애초에 생성할때
Calculator 형식의 데이터 cal에 20,40을 담아줌으로써
cal.sum
cal.avg 를 구할수 있게 된거다.
이렇게사용하면 된다.

	public static void (String[] args){
		Calculator cal = new Calculator(20, 40);
    	cal.sum;  // 60
        cal.avg;  // 30
	}

Calculator 데이터형식 변수 cal의 sum과 avg를 구할수 있었다.
cal.sum 은 직접 20,40이 담겨져 있어 cal의 sum과 avg를 구하는 느낌이라면
첫번 째 코드는 20과 40의 합을 구하기 위해 cal을만들고 그안에 sum메소드를 사용하는 느낌이다.

앞으로 객체지향 프로그래밍을 하기위해 첫걸음을 뗀 기분이다.
객체지향 그자체만으로도 범위가 넓고 추상적이라
개발자로써 소양을 기를 수 있도록 하는 것 같다.

profile
java 주니어

0개의 댓글