본문 바로가기
개발자 일기/일일회고 (TIL)

[Upstage AI Lab]부트캠프 2일차

by MS_developer 2024. 11. 15.

오늘의 생각

이런 일이 일어나지 않길....

 

 

이미 개발 업무를 많이 해 봤고, 관련된 공부도 나름 오래 했다보니 이론적인 부분을 이해하는 데 지장은 없는 것 같다.

 

객체 지향 프로그래밍을 쓰는 이유라던가, 함수의 호출과 선언이라던가 매우 익숙한 내용들이었다. 다만 문법 자체가 달라서 많은 연습이 필요할 것 같다.

 

이제 기본적인 조건문, 반복문 등을 사용할 수 있고 함수를 선언할 수 있으니 파이썬으로 알고리즘 공부도 시작하면서 기초를 다질 생각이다.


오늘의 학습내용

  • 사용자 입력과 문자열의 변환
  • 파일 입출력 방법
  • 조건문 문법, 관계 연산자와 논리 연산자
  • 자료형에 따른 반복문 문법, range() 함수를 활용한 범위 반복
  • 함수 - 디폴트 매개변수, 가변 매개변수, 키워드 매개변수의 차이점과 활용법
  • 객체 지향 프로그래밍의 장단점, 객체와 인스턴스의 차이점
  • 클래스 상속과 메소드 오버라이딩, 다중 상속
  • 내부 모듈과 외부 모듈의 활용법 (feat. seaborn)
  • 예외 처리 기법, 구문 오류와 런타임 오류의 차이

추가적으로 알게 된 내용

1. 자바스크립트에서도 pass 문법에 대응하는 것이 있는가?

 

결론부터 말하자면 없다.

 

하지만 그에 대응하는 비슷한 역할은 있다.

 

빈 코드 블럭을 사용한다던가, 빈 함수 또는 화살표 함수를 사용하는 것이 그 방법이다. 

 

if condition:
    pass  # 아무것도 하지 않음

 

if (condition) {
    // 아무 동작도 하지 않음
}

 

위와 같은 방식으로 pass와 같이 동작시킬 수 있다.

 

2. 다중 상속은 파이썬에서만 가능한가?

 

처음 다중 상속에 대해 배웠을 때 조금 당황스러웠다.

 

지금까지 자바, 자바스크립트를 기반으로 한 내 지식에서 클래스를 여럿 상속 받는 경우는 없었기 때문이다.

 

찾아보니 자바, 자바스크립트 모두 다중 상속은 지원하지 않는다. 단, 비슷한 방식으로는 사용할 수 있다.

 

interface A {
    void methodA();
}

interface B {
    void methodB();
}

class C implements A, B {
    public void methodA() { System.out.println("A method"); }
    public void methodB() { System.out.println("B method"); }
}

 

자바의 경우 인터페이스를 통해서 다중 상속과 유사한 기능을 구현할 수 있다. 클래스는 호직 하나의 클래스만 상속할 수 있다.

 

let mixinA = {
    methodA() { console.log("A method"); }
};

let mixinB = {
    methodB() { console.log("B method"); }
};

class C {
    constructor() {
        Object.assign(this, mixinA, mixinB);  // 믹스인을 통해 다중 상속 유사 구현
    }
}

let c = new C();
c.methodA();  // A method
c.methodB();  // B method

 

자바스크립트믹스인(mixin) 패턴을 사용하여 여러 클래스로부터 속성과 메서드를 결합할 수 있다.

 

interface A {
  methodA(): void;
}

interface B {
  methodB(): void;
}

class Base {}

const MixinA = <T extends Constructor<Base>>(Base: T) => {
  return class extends Base implements A {
    methodA() {
      console.log("A method");
    }
  };
};

const MixinB = <T extends Constructor<Base>>(Base: T) => {
  return class extends Base implements B {
    methodB() {
      console.log("B method");
    }
  };
};

class C extends MixinA(MixinB(Base)) {}

const c = new C();
c.methodA();  // A method
c.methodB();  // B method

 

조금 더 나아가자면 타입스크립트를 통해 인터페이스와 믹스인 패턴을 결합해 더 복잡한 다중 상속 구조를 만들 수 있다. 이를 통해 인터페이스로 타입을 보장하고 믹스인을 통해 실제 구현을 추가하는 방식을 채택할 수 있다.

 

별개로 C++는 다중 상속을 지원한다고 한다. 

댓글