티스토리 뷰

기타/TIL

210219 금 TIL

bong-f 2021. 2. 19. 10:00

Done

  • 미션4 일부
  • 자바의정석 7 복습 (연습문제 못함)

Learned

1. void 메서드는 안좋을까?

(1-1) 왜 학습? 코드리뷰를 받았을 때, 앞으로 void 메서드 활용할 때 꼭 void가 필요할지, 구조를 다르게해서 return을 반환하면 어떨지 고민해 보시라고 하셨다.

  • void 메서드의 사용을 지양해야 하나? 의 물음에서 시작되었다.

(1-2) 학습내용

  • 아직 이 부분에 대해 명확히 이해하지 못했다.
  • 다만 감으로 이해한 바를 적어보자면,
  • void 메서드는 side effect ( 부작용이라고 읽고 부수효과라 적는다 https://bong-f.tistory.com/103 ) 를 가한다.
  • 생각해보니 함수는 그 안에 무엇을 하는지 알고 싶지 않고 어떤 요청이 있으면 거기에 응답을 해야 하는데 명확하게 응답하지 않고 외부에 영향만 끼치는 느낌과 같았다.
  • 그러다보니 해당 메서드를 잘못 사용할 가능성도 높아지는 것 같다.
public class Adder {

    private int cumulativeValue;

    public void add(int value) {
        cumulativeValue += value;
    }

    public void reset() {
        cumulativeValue = 0;
    }

    public static void main(final String[] args) {

        final Adder adder = new Adder();

        for (int i = 0; i < 10; i++) { adder.add(i); }
        System.out.println("Sum of all numbers from 0 to 9 is " + adder.cumulativeValue); 
        // Output : 45

        adder.reset();
        for (int i = 0; i < 10; i++) { adder.add(i); }
        System.out.println("Sum of all numbers from 0 to 9 is " + adder.cumulativeValue); 
        // Output : 45

        for (int i = 0; i < 10; i++) { adder.add(i); }
        System.out.println("Sum of all numbers from 0 to 9 is " + adder.cumulativeValue); 
        // Output : 90 (Oops!)
    }
}

(1-3) 공부하다가 유용했던 자료들

void 메서드 안에 return을 쓰는 것은 나쁠까?

  • 출처 https://stackoverflow.com/questions/1283325/is-it-bad-practice-to-use-return-inside-a-void-method

    if(!a) return;
    dosomething();
    if(a) { dosomething() }
  • 두 코드 중 어떤 것이 나을까?

  • 위의 코드가 더 낫다고 한다. 중첩(nesting)을 줄일 수 있어서

  • 또 다른 프로그래머가 코드를 추가한다고 생각했을 때도, { } 안에 추가 보다, 그 밖에 추가하는 것이 더 낫다.Guard Clauses

  • 출처 https://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html

  • 가독성이 훨씬 좋다

  • 하는 작업은 똑같다. ; 중첩된 if else문 대신 이렇게 쓰라는 말이군. 사실 그럼 조건을 여러 번 확인하게 되니까 더 안좋은 거 아니야? 라고 단순하게 생각했는데 if else문에서도 어차피 아래 조건까지 내려오게 되면 확인하게 되어있다. 수정된 코드는 return문이 있기 때문에 어쨌든 위의 조건에서 return되면 아래 조건을 확인안하니 성능은 결국 같다

2. 팩토리 메서드 패턴 ( #todo)

  • 객체 생성코드를 별도의 클래스 / 메서드로 분리

  • 그에 따라 객체 생성의 변화에 대비하는데 유용하다.

  • 출처 https://gmlwjd9405.github.io/2018/08/07/factory-method-pattern.html

  • 보충설명 : https://jdm.kr/blog/180

    • 팩토리 == 공장, 팩토리 메서드 패턴은 객체를 만들어내는 공장을 만드는 패턴
    • 목적 : 클래스의 결합도를 낮추기 위한 것
    • 결합도 == 클래스의 변경점이 생겼을 때 얼마다 다른 클래스에도 영향을 주는가
  • 아직 잘 모르겠지만 아래의 코드로 이해했다. (출처 위키피디아)

# Our Pizza


class Pizza:  
HAM\_MUSHROOM\_PIZZA\_TYPE = 0  
DELUXE\_PIZZA\_TYPE = 1  
SEAFOOD\_PIZZA\_TYPE= 2

def __init__(self):
    self.__price = None

def getPrice(self):
    return self.__price

class HamAndMushroomPizza(Pizza):  
def **init**(self):  
self.\_\_price = 8.50

class DeluxePizza(Pizza):  
def **init**(self):  
self.\_\_price = 10.50

class SeafoodPizza(Pizza):  
def **init**(self):  
self.\_\_price = 11.50

class PizzaFactory:  
def createPizza(self, pizzaType):  
if pizzaType == Pizza.HAM\_MUSHROOM\_PIZZA\_TYPE:  
return HamAndMushroomPizza()  
elif pizzaType == Pizza.DELUXE\_PIZZA\_TYPE:  
return DeluxePizza()  
elif pizzaType == Pizza.SEAFOOD\_PIZZA\_TYPE:  
return SeafoodPizza()  
else:  
return DeluxePizza()

# Usage

pizzaPrice = PizzaFactory().createPizza(Pizza.HAM\_MUSHROOM\_PIZZA\_TYPE).getPrice()  
print "$%.02f" % pizzaPrice
  • 보면, 여러종류의 피자가 있다. 피자 공장에서 createPizza는 pizzaType에 따라서 다른 피자(각각 다른 클래스) 들을 생성해주고 있다
  • 보통 메서드로 분리하는 것 보다는 다른 클래스로 분리하던데.. 팩토리 메서드 패턴의 의미와 활용에 대해서 더 공부해봐야겠다

3. System.getProperty()

  • 출처 https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
  • OS 종속적인 값들을 반환한다. 현재 실행되는 환경에 맞게.
  • 예를 들어 위의 System.getProperty("line.seperator") 를 맥에서 실행했을 때와 윈도우에서 실행했을 때 다르게 나올 것이다.
  • 이것을 활용해서 프로그램을 짜면, 개행문자가 환경마다 다르더라도 똑같은 개행 기능을 실행할 수 있을 것이다.

System.getProperty("line.seperator")

기타

인텔리제이

  • ctrl shift f 프로젝트 내 단어 전체 검색
  • ctrl shift r 프로젝트 내 단어 일괄적 수정 가능

(복습) static import

  • static import를 사용하면 클래스명을 붙이지 않아도 사용가능하다.
  • A클래스의 a메소드가 있다고 하면 원래 단순 import 사용시 A.a 이런식으로 사용해야 했는데 static import를 하면 a 이렇게만 해도 사용 가능하다.

Good

  • 오늘은 집중이 잘 안되었는데 나름의 방법으로 잘했다.

Bad

  • 자바 복습에 시간이 너무 많이 걸려서 다른 것을 못했는데 이 기본서 복습의 비중을 이렇게 높게 잡는 것이 과연 현명한가? 하는 의문이 든다. 기본서 개념도 중요하지만 코드를 직접 짜면서 훨씬 더 많이 느는 것 같다.

Feeling

  • 그래도 주말이 코앞이다. 쉴 건 좀 쉬고, 욕심은 났지만 못했던 분들을 해내고 싶다. 과연 48시간 후에 나는 어떤 리뷰를 쓰고 있을지.. ㅎ

'기타 > TIL' 카테고리의 다른 글

210218 목 TIL  (0) 2021.02.18
210217 수 TIL  (0) 2021.02.17
210216 화 TIL  (0) 2021.02.16
210215 월 TIL  (0) 2021.02.15
210214 일 TIL  (0) 2021.02.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함