본캠프 2주차 목요일 TIL

호씨·2024년 10월 31일
0

금일은 LV3계산기 문제를 풀면서 부족한 부분이 뭔지를 깨달은 하루였다.

1. 계산기 만들기

  • 아래 각각의 클래스들을 만들고 클래스간의 관계를 고려하여 Calculator 클래스와 관계 맺기
    • AddOperation(더하기)
    • SubstractOperation(빼기)
    • MultiplyOperation(곱하기)
    • DivideOperation(나누기)
  • Calculator 클래스의 내부코드를 변경
    • 관계를 맺은 후 필요하다면 별도로 만든 연산 클래스의 인스턴스를 Calculator 내부에서 사용

해당부분은 아래에 코드를 달면서 세부설명을 해야할것같다

class Calculator {
    // 인스턴스 담을 프로퍼티 선언
    var addOperation: AddOperation              // 덧셈
    var subtractOperation: SubtractOperation    // 뺼셈
    var multiplyOperation: MultiplyOperation    // 곱셈
    var divideOperation: DivideOperation        // 나눗셈
    
    // 프로퍼티 초기화
    init(addOperation: AddOperation, subtractOperation: SubtractOperation, multiplyOperation: MultiplyOperation, divideOperation: DivideOperation) {
        self.addOperation = AddOperation()
        self.subtractOperation = SubtractOperation()
        self.multiplyOperation = MultiplyOperation()
        self.divideOperation = DivideOperation()
    }
    
}

// 각 연산의 클래스 생성
class AddOperation {
    func add(a: Int, b: Int) -> Int {
        return a + b
    }
}

class SubtractOperation {
    func subtract(a: Int, b: Int) -> Int {
        return a - b
    }
}

class MultiplyOperation {
    func multiply(a: Int, b: Int) -> Int {
        return a * b
    }
}

class DivideOperation {
    func divide(a: Int, b: Int) -> Int {
        return a / b
    }
}

// 각 연산의 인스턴스 생성
let addOperation = AddOperation()
let subtractOperation = SubtractOperation()
let multiplyOperation = MultiplyOperation()
let divideOperation = DivideOperation()

//자동완성의 위험함에 빠졌었음. addOperation: addOperation 로 가야되는데 addOperation: AddOperation로 자동완성이 되어버리니 실행에서 오류가 발생했었었음. 자동완성 하기전에 한번 맞는지 확인을 해보자
let calculator = Calculator.init(addOperation: addOperation, subtractOperation: subtractOperation, multiplyOperation: multiplyOperation, divideOperation: divideOperation)

// 연산(임의의 값 10, 3 각각 부여)
// 이녀석도 마찬가지, 자동완성에서 뒤에 .연산함수명이 안붇은걸 그냥 돌려서 실행시 오류발생
calculator.addOperation.add(a: 10, b: 3)
calculator.subtractOperation.subtract(a: 10, b: 3)
calculator.multiplyOperation.multiply(a: 10, b: 3)
calculator.divideOperation.divide(a: 10, b: 3)

// 이렇게 코드가 싹 자동으로 완성되는 IDE는 처음인데 편한줄 알았는데 생각보다 함정카드가 매우 많음
// 결론 : 자동완성을 너무 맹신하지 말자, 쓰더라도 이게 맞는지, 맞게 들어간건지 확인하고 사용할것

어제는 코드를 작성하면서 유료의, 혹은 AI가 탑재된? IDE의 자동완성 기능에 놀랐다면 오늘은 그 반대의 상황들이 있었다.

그동안 쓴 IDE는 그냥 내가 입력한거에 맞게 앞에 들어갈 단어, 혹은 문법 구조만 잡아줬다면 xCode는 일단 예상되는 코드를 싹 자동으로 완성시켜주는 기능이 있었는데 여기에 피해를 한번 입었었다.

코드내에 주석으로 처리된 부분들을 보면 정리가 되어있지만 내가 생각한것과 다른, 혹은 누락된 자동완성 기능들이 있어서 무지성으로 확인을 안하고 자동완성을 했다가 오류로 인해서 제대로 코드가 실행이 안됐었다.

먼저 내가 당한것은 크게 두개로 calculator클래스를 실행 할 때 addOperation: addOperation 로 가야되는데 addOperation: AddOperation로 자동완성이 되어버리니 실행에서 오류가 발생했었었다.

두번째로는 자동완성에서 뒤에 .연산함수명이 안붇은걸 그냥 돌려서 실행시 오류가 발생했었다.

자동완성의 기능들을 떠나서 어제까지만 해도 '너 이거 쓸거지, 만들거지?' 이런 느낌으로 만들어준 느낌이라면
오늘은 그냥 생각과 다른, 혹은 그냥 나온것들이 꽤 있어서 당황스러웠다.

2. 느낀점

  1. 오늘 하면서 먼저 느낀것은 자동완성 기능을 맹신하지 말자가 첫번째였다.
    위의 내가 겪은일들은 물론 간단한 코드인데다가 원인을 바로 찾을수 있었지만 나중에 더 복잡하고 긴 코드를 만들게 된다면 자동완성을 필연적으로 사용하게 될텐데, 사용하게 된다면 적어도 쓰기전에 이게 맞는지 확인하는 과정을 거쳐야할것같다.

  2. 두번째는 공부 관련된건데 내가 지금 문제라고 생각하는게 용어, 컴퓨터적 사고가 약하다는 생각이 들어서 해당 부분은 강의와 지속적인 문제풀이를 통해서 많이 부딪혀봐야될것같다.

profile
이것저것 많이 해보고싶은 사람

0개의 댓글