[과외] 클래스? 그거 왜 쓰는건데?

2021. 5. 26. 15:06개발 잡부

728x90

사실 클래스를 처음 배우면 이걸 왜 쓰지 싶다.
C++로 코딩을 처음 배웠다면 struct에 함수를 추가하는 것 정도의 기능으로 생각할 수 있다.
오늘은 클래스를 왜 쓰는지, 어떻게 응용할 수 있는지 알아보도록 하자.

미리 얘기하자면 클래스의 사용법이나 문법, 기능을 설명하는게 아니라,
왜 사용하고 어떤 때에 사용하는지에 대한 설명이다.


클래스는 재사용이 짱짱맨이다

 

예를 들어보자. 나랑 친구 A가 롤을 각자 하고 있다.
이걸 클래스와 구조체를 사용하지 않으면 이렇게 된다.

어우 복잡해

이런 식으로 변수를 이용해 해야한다. 같은 내용들끼리 배열로 묶을 수 있겠지만,
그래도 여전히 불편해진다.

하지만 여기서 클래스가 나온다면 어떻게 될까?

이런 식으로 정보가 묶이게 되면서 관리가 더 편해지게 된다.
지금은 2개만 했지만, 현실에서는 이러한 게임이 동시에 수만개가 돌아가고 있다.

그리고 정보를 표현하는 방법이 달라졌다.
예전에는 '내 게임의 팀원들'이었다면, 지금은 '내 게임 -> 팀원들'이다.
예시를 든다면 이런 느낌일까?

오른쪽이 더 분류가 더 잘 된 느낌


클래스는 확장이 쉽다.

사실 상속, 오버라이드 같은 얘기를 쓰면 이걸 어디에 쓸까?라는 생각을 하기 쉽다.
이런 예시를 생각해보자.

class MakingCoffee {
	function 만들기() {
    	원두추출();
        기타재료넣기();
        얼음넣기();
    }
    
    function 원두추출() {
    	어찌구_저찌구();
    }
    
    function 기타재료넣기() {
    	// 빈 함수
    }

	function 얼음넣기() {
    	얼음을_퐁당();
    }
}

커피 만드는 방법에 대한 기본적인 클래스가 생겼다. 그럼 이제 '라떼'를 만들어 보자.

class MakingLatte extends MakingCoffee {
	function 기타재료넣기() {
    	우유를_콸콸콸();
    }
}

와! 코드가 이렇게 끝났다. 기존 MakingCoffee의 기존 흐름을 유지하면서도,
원하는 부분만 수정해서 원두짜기 -> 우유 넣기 -> 얼음 넣기가 되도록 하였다.

이런 식으로 각 단계를 쪼개서 단계 단위로 교체할 수 있다는 장점이 있다.

한번 더 응용해서 '뜨거운 커피'를 만들어보자

class MakingHotCoffee extends MakingCoffee {
	function 얼음 넣기() {
    	return;
    }
}

물론 실제로 코드를 짜면 이렇게 하지는 않겠지만,
얼음 넣기를 깡통으로 만들어버리면서 얼음 넣는 과정을 생략시켜버렸다.
이런 식으로 활용할 수 있다라는 걸 알아보자.