1. 생활코딩 수업
오늘은 생활코딩의 JAVA 객체 지향 프로그래밍을 학습했다. 어제부터 공부했는데, 제법 어려워서 어제 다 공부하지 못한 것을 오늘 다 공부했다. (어제는 공부하는데 머리가 너무 아파서 포기했었다. 내 전공(역사) 공부할때는 머리가 아프다는 느낌을 받은 적이 딱히 없었는데, 코딩을 공부 할때는 진짜로 말 그대로 머리가 아프다;; 생소한 지식이어서 그런 것 같다. 주제와는 상관 없으니 이하 각설.)
객체지향은 흥미롭다. 클래스의 권한을 한정하여 한 클래스가 다른 클래스에게 영향력을 행사하는 월권을 막을 수 있는 유용한 툴이다. 그리고 상위 객체와 하위 객체를 설정하여 객체간의 권한의 크기를 다르게 부여할 수 있다는 부분도 매우 흥미롭다. 오늘은 클래스보다는 조금 더 추상적인 인스턴스에 대해 조금 집중해서 공부했다.
오늘 한 실습을 통해 객체 지향 프로그래밍에서 얻을 수 있는 유지보수의 용이성에 대해 살펴보자.
위 코드는 상품의 공급가, VAT(부가가치세), 소비자가(공급가+VAT)를 도출할 수 있는 코드이다. 공급가를 설정하면 VAT와 소비자가를 자동으로 계산할 수 있다. 충분히 좋은 코드이지만 조금 아쉽다. 만약 공급가를 자주 바꿔줘야 하는 상황이 온다면 수시로 공급가(Accounting.valueOfSupply)를 바꿔줘야 하기 때문이다. 코드가 짧아서 망정이지, 만약 코드가 길고 복잡하다면 실수로 인해서 버그가 발생할 확률이 매우 높다.
위의 문제를 해결하기 위한 첫번째 해결방안이다. 인스턴스를 도입해서 공급가를 변경할 때 클래스 자체의 변수를 변화시키지 않고, Accounting이라는 클래스의 인스턴스(복제본???)를 만든 후 그 인스턴스의 변수를 변화하도록 명령했다. 유지보수면에서 훨씬 안정적이다. 만약 위 메커니즘에서 버그가 발생한다면 단순히 인스턴스를 조작하면 된다. 보다 중요한 원래 클래스 Accounting은 영향을 받지 않는다.
그러나 이 코드도 조금 아쉽다. 유지보수면에서 앞의 코드보다 훨씬 안정적이지만, 만약 공급가를 수시로 바꿔줘야 한다면 인스턴스를 계속 생성하면서 동시에 aX.valueOfSupply = xxxxx.x;라는 코드를 추가해 공급가를 설정해줘야 한다. 조금 더 간단하게 코드를 짜볼 수 없을까.
3번째 수정안이다. Accounting 클래스 내부에 공급가를 지정할 수 있는 method를 만들어 Accounting 클래스에 대한 인스턴스를 구성할 때 필수적으로 공급가를 지정할 수 있도록 했다. 이 경우에는 인스턴스를 만들 때 반드시 공급가를 설정해야 한다. 2줄의 코드가 1줄로 바뀐 이상의 효율성이 생겼다. 생활코딩에서는 여기까지 진행했지만, 나는 조금 아쉬웠다. 만약 공급가를 계속 재설정해줘야 하는 코드라면 main method 내에서의 코드 양이 상당히 많아질 것 같았다. 그 부분을 해결할 수는 없을까.
+ 사실 this를 이용해서 코드를 조금 더 바꿀 수 있는데, 아직 this가 뭔지 잘 모르겠다. 용도를 정확히 모르기 때문에 쓰지 않았다.
그래서 이클립스의 도움을 받아(public printResult()라고 처음에 썼었는데 오류가 떴다. 이클립스 에디터 기능의 도움을 받아 void를 만들어줘야 한다는 것을 알게 됐다. 나는 아직 void가 무슨 기능인지는 모르는 상태다.) 코드를 수정했다.
Accounting 클래스에 printReult라는 method를 두어서 AccountingApp 클래스 내의 main method가 복잡해질 수 있는 가능성을 제거했다. 이 방법으로 이전에서는 4줄의 코드를 사용해야 했던 것을 2줄로 줄일 수 있었다.
오늘은 객체 지향 프로그래밍이 무엇인지, 그리고 특히 인스턴스가 무엇인지 배웠다. 그리고 그 과정에서 리펙토링에 대한 개념을 조금 깊게 이해할 수 있었다. 리펙토링은 코드 내에 잠재하고 있는 여러 위험요소를 제거하는 과정이자 컴퓨터에 불필요하게 가해질 수 있는 낭비를 줄이는 과정이었다. 리펙토링을 통해 코드는 훨씬 가독성이 높아진다(코드를 보는 인간에게 아주 중요하다. 머리가 덜 아플테니까...... 코드를 보는 것은 아직까지는 나에게 머리가 너무 아픈 과정이다;;;;). 또 리펙토링을 통해 버그 발생율이 줄어들 수 있고, 버그가 발생했을 때 그것을 제어하는데 많은 도움을 받을 수 있다. 무엇보다, 재밌다.... 지저분한 방청소를 하는 것처럼 코드가 점점 가독성이 높아지는 과정을 바라보는게... 뿌듯하고 기분이 좋았다... ㅎ 코딩이 적성에 맞는 것 같다는 생각을 하게 됐다... 만세 ㅎ..
'JAVA' 카테고리의 다른 글
JAVA 문법 : 다형성(Polymorphism) (0) | 2021.09.15 |
---|---|
JAVA 문법 : 클래스와 객체 (0) | 2021.09.15 |
2021. 08. 07 Java 연습 문제 풀기 & 모르는 문제 (4) | 2021.08.07 |
Java로 복리 계산기 만들기 (0) | 2021.08.06 |
2021. 08. 02 오늘 공부한 것(JAVA) (0) | 2021.08.02 |