혼자 공부하는 파이썬 19강 - 리스트의 요소 추가 함수 + 비파괴적 함수와 파괴적 함수 구분

Поделиться
HTML-код
  • Опубликовано: 22 дек 2024

Комментарии • 77

  • @cityfarmer7404
    @cityfarmer7404 3 года назад +1

    좋은 강의에 감사하니다. 정주행 중입니다.

  • @aaron-kim00
    @aaron-kim00 3 года назад

    감사합니다

  • @똑똑생활연구소
    @똑똑생활연구소 3 года назад

    강의를 너무 잘하셔서 그런가..! 한번에 이해가 되는데요!

  • @빠앙뿌
    @빠앙뿌 3 года назад

    좋은 강의 정말 감사합니다. 한 가지 작은 질문이 있어 댓글 남깁니다.
    append()와 insert()는 요소 추가 시 []표시를 같이 하지 않아도 되는데 왜 extend()는 요소를 추가할때 []표시를 해주어야하나요?

    • @윤인성
      @윤인성  3 года назад

      append와 insert는 매개변수로 요소를 받게 설계되어 있고
      extend는 매개변수로 리스트를 받게 설계되어 있습니다.
      이건 그냥 "🍎를 사과라고 한다"처럼 만들어진 것이라 그냥 외워야 합니다!

    • @빠앙뿌
      @빠앙뿌 3 года назад

      @@윤인성 헉 이렇게 늦은? 이른? 시간에 빠른 답변 감사합니다. 편안한 새벽 되세요 :)

  • @Noah-ll7oh
    @Noah-ll7oh 2 года назад

    리스트처럼 크기가 얼마나 커질지 모르는 녀석을 원본도 만들고 신규본도 만드는 것은 컴퓨터에 부담을 줄 수 있는 행위.

  • @jinbumjoo3908
    @jinbumjoo3908 2 года назад

    잘 보고있습니다. 감사드립니다.
    만약 insert사용시 [[],[],[]]에서 3번째 []에 1번째 자리에 삽입하고 싶으면 어떻게 해야할까요?

    • @윤인성
      @윤인성  2 года назад +1

      리스트[2].insert(0, 요소)하시면 됩니다

  • @강동우-s5k
    @강동우-s5k 2 года назад +1

    라이브러리 개념 좀 쉽게 알려주세요... (아직 초보입니다)

    • @윤인성
      @윤인성  2 года назад +1

      "다른 사람이 미리 만들어둔 함수 묶음"이라고 생각하시면 됩니다!
      다만 아직 함수 부분을 다루지 않아서
      함수까지는 살펴봐야 이게 무슨 의미인지 조금 더 자세하게 알 수 있고
      "정상 제어 방향을 갖는다"라는 것이 있는데
      이것도 모듈까지는 살펴봐야 무슨 의미인지 조금 더 확실하게 알 수 있습니다!

  • @zeyoung1983
    @zeyoung1983 2 года назад

    어쨌거나 출첵~!

  • @파린이-g7d
    @파린이-g7d 3 года назад

    자기 혼자 동작하는 함수, a가 가지는 함수의 차이를 잘 모르겠어요
    예를 들어서 '{}'.format()함수 같은 경우는 괄호안에 무언가?를 넣어서 문자열에 변화를 주기 때문에 .함수() 라는 형태가 있어야 한다고는 생각하는데 a.lower()같은 함수는 lower(a)였어도 차이가 없었을 것 같은 느낌?이예요
    그저 문자열이나 리스트에 변화를 주는 함수일 때 헷갈리지 않도록 함수를 a.함수() 의 형태로 쓰는건가요?

    • @윤인성
      @윤인성  3 года назад +1

      차이가 없다는 생각이 맞습니다.
      어떤 형태로 만들어도 기능적으로는 동일합니다.
      그냥 한국어에서도 "물"이라는 의미를 "물"로 쓰기도 하지만 "수(탄산수, 수력 발전 등에서)"로 쓰기도 한다 → "이 차이는 그냥 외우는 수 밖에 없다"로 생각하시는 것이 더 편할 것 같습니다.
      PS. C# 등의 좀 뒤에 나온 프로그래밍 언어는 대부분 ㅇㅇ.ㅇㅇ()의 형태를 쓰는데, 파이썬이 과도기적 형태라서 len() str() .lower() 등이 섞여 있습니다.

  • @HayeonQueen
    @HayeonQueen 4 года назад +1

    샘 if 랑 elif 조건문 질문이요
    a = input(">>")
    if a == "ㄱ" or "ㄴ" or "ㄷ" :
    print ('' True")
    elif a == "ㄹ" :
    print("False")
    이렇게해서 실행한담에 a 에 'ㄹ' 를 넣어봤는데 자꾸 False 가 안나오고 True 만 나와요 ㅠ 뭐가 잘못된거죠 ??

    • @윤인성
      @윤인성  4 года назад +3

      초보자 때에 "될 것 같다"라고 생각하지만, 언어가 인식을 못 해서 시험 문제 등에 자주 출제되는 문제인데
      a == "ㄱ" or "ㄴ" or "ㄷ" .... 등은 사용할 수 없습니다[or은 불 표현식만 연결하게 때문입니다].
      조금 귀찮지만 a == "ㄱ" or a == "ㄴ" or a == "ㄷ" or .... 처럼 써주셔야 합니다[또는 그냥 a in ["ㄱ","ㄴ","ㄷ"] 등].

  • @JieunKim-c9n
    @JieunKim-c9n 2 года назад

    a.append() 와 a.insert() 는 다 리스트에 element를 추가하는 것 같은데 리스트에 element를 삭제하는 함수?도 있나요?

    • @윤인성
      @윤인성  2 года назад +1

      remove()를 사용하시면 됩니다!

  • @hello_sungwon
    @hello_sungwon 3 года назад

    list_a = [1, 2, 3]
    print(list_a.extend([4, 5]))
    는 결과값이 왜 None이 나오는건가요?
    list_a = [1,2,3]
    list_a = list_a.extend([4,5])
    print(list_a)
    는 출력이 [1,2,3,4,5]로 나오는 것과의 차이를 잘 모르겠습니다. 다른 함수들은 이렇게 바로 안에 넣어서 출력해도 잘 됐던거 같은데 말이죠.

    • @윤인성
      @윤인성  3 года назад +1

      extend는 파괴적 함수입니다. 따라서
      list_a = [1, 2, 3]
      list_a = list_a.extend([4,5])
      print(list_a)
      로 작성하셔야 합니다.
      함수가 다르면 그 기능과 형식이 다릅니다. 따라서 다른 함수(비파괴적 함수)들이 다 이렇다고, extend도 그런 것은 아닙니다.
      전부 외워야 합니다.

  • @장윤철-h9q
    @장윤철-h9q 2 года назад

    반가워요. 저는 자동완성 안돼요. vsc를 사용하는데, 어떻게 설정 해야 돼나요?

    • @윤인성
      @윤인성  2 года назад

      "일부 분들이 첫 강의에서는 안 되다가 + 끝날 때 쯔음에 그냥 되었다"라는 말을 해주시더라구요!
      .
      파이썬 파일로 저장을 했고 + 색상 적용도 되고 + 파이썬 확장 프로그램도 설치했는데 = 자동 완성이 안 된다면
      사실 기다리셔야 합니다 ;ㅁ; ...!! 처음 이 기능을 읽어 들이는데 시간이 좀 걸리는 것으로 보입니다.
      .
      한 번 재설치 해보시고, 그래도 안 된다면 기다리셔야 할 것 같습니다!

  • @매새-n8n
    @매새-n8n 3 года назад

    안녕하세요 insert 자동완성 기능에서 옆에 뭘 넣어야하는지 알려주는 안내(?)상자? 가 안뜨는데 어떻게 해야하나요?

    • @윤인성
      @윤인성  3 года назад +1

      상황이 여러가지인데
      1. 에디터 오른쪽 아래에 python이라고 되어 있는지 확인해주세요.
      2. python 확장 프로그램을 제거했다가 다시 설치해보세요![왼쪽 5개의 아이콘 중 가장 아래 extensions에서 python 검색 후 제거 + 설치]
      3. VSCode를 다시 설치해보세요!
      4. 이게 처음에 안 되시다가 강의 중간 정도 가서 되시는 분들도 있어서 @_@ , 위의 것이 다 안되면 시간을 갖고 기다려보시는 것도 추천합니다!

    • @매새-n8n
      @매새-n8n 3 года назад

      감사합니다. 참 공부하면서 드는 생각인데요.. 이렇게 배운 파이썬 내용들은 회사에 들어가서 어떻개 사용하나요? 예를들어 고객 분석과 분류같은 업무를 하나요? 아니몀 서버를 만들고 운영하는 업무를 하나요?

    • @윤인성
      @윤인성  3 года назад +1

      @@매새-n8n 음 어떤 영역에 계신지 몰라서 정확하게 답변은 힘든데, 개발 직종이라면 해당 업무를 진행하게 되며[일반적으로 데이터 과학자], 개발 직종이 아니시라면
      - 데이터 과학자
      - ::여기 중간 다리를 연결할 수 있는 사람::
      - 현장
      으로 활용하게 됩니다[즉 회사 내부에 데이터 과학자(데이터 사이언티스트)가 있어야 어느 정도 활발하게 활용하게 됩니다]. 해당 영역을 어느정도 알면서 + 개발과 관련된 내용도 어느 정도 알아서 그걸 연결하는 업무(개발 쪽에 가까우면 데이터 엔지니어, 현장 쪽에 가까우면 영업팀 업무)를 합니다.
      .
      파이썬은 위의 것이 가장 일반적인 것 같습니다!

    • @매새-n8n
      @매새-n8n 3 года назад

      친절한 답변 감사합니다 취업하면 그 회사에 맞춰 일 할 수 있을지 걱정이많아서요 감사합니다 선생님

  • @조성현-q4l
    @조성현-q4l 3 года назад

    안녕하세요. 공부하다가 궁금증이 있어 질문 남깁니다.(항상 답변 감사합니다. ㅎㅎ)
    extend()의 경우 list 뒤에 여러 요소를 추가하는데 list 중간에 여러 요소를 추가 하고 싶을 때 사용하는 함수도 있나요?

    • @윤인성
      @윤인성  3 года назад +1

      기본적으로는 제공되지 않으므로, 따로 만들어야 합니다!

    • @조성현-q4l
      @조성현-q4l 3 года назад

      @@윤인성 답변 감사합니다! ㅎㅎ

  • @김대한-w5e
    @김대한-w5e 3 года назад

    전의 함수에 대해서 말씀하실때 format()함수의 경우 예를 들어서
    "지금{}입력하시오".format("당신의 나이를") 같은 경우 차례대로 주어 동사 목적어 처럼 생각하라고 말씀 하셨는데 print("이름") 앞에서 말한 예로 설명하자면 주어가 빠졌는데도 실행이 됩니다. 왜 그런 건 가요?

    • @윤인성
      @윤인성  3 года назад

      해당 강의에서도 언급했는데
      영어는 주어가 빠지면 명령어입니다!
      Go now[지금 가라] 등등
      이게 프로그래밍 언어가 처음 설계된 방식입니다[명령어 기반의 프로그래밍][프로그래밍이 초기에 군대를 기반으로 시작해서 명령 위주라는 이야기도 있습니다]

    • @김대한-w5e
      @김대한-w5e 3 года назад

      @@윤인성감사합니다. 생각보다 단순한 거였네요.
      항상 잘보고 있습니다.

  • @조성현-q4l
    @조성현-q4l 4 года назад

    오늘도 강의 감사드립니다. 질문이 있는데요
    a = [1, 2, 3]
    b = [4, 5, 6]
    c = a.extend([4, 5, 6])
    1. print(a)
    2. print(c)
    1은 [1, 2, 3, 4, 5, 6]
    가 나오는데
    2는 None이 나오는 이유가 무엇인가요?

    • @윤인성
      @윤인성  4 года назад

      extend()가 비파괴적 함수로 설계되어 있어서 a 자체가 변경됩니다. 함수의 실행 결과로 나오는 값(리턴값)은 없습니다.

    • @홍민표-s4r
      @홍민표-s4r 4 года назад

      @@윤인성 "함수의 실행 결과로 나오는 값(리턴값)은 없습니다. " 라는 말씀은
      "extend() 함수의 실행 결과로 나오는 값(리턴값)은 없습니다." 인가요?
      그렇다면
      "파괴적 함수의 실행 결과로 나오는 값(리턴값)은 없다" 로 확장해서 생각해도 되나요?
      추가로, extend() 가 "파괴적" 함수 맞죠?

    • @윤인성
      @윤인성  4 года назад

      ​@@홍민표-s4r2. extend() 함수는 파괴적입니다.
      1. 파이썬의 기본 리스트 라이브러리에서 파괴적 함수는 리턴값이 없지만, 이는 이 함수들에 국한된 것이고,
      일부 외부 라이브러리(또는 다른 언어의 기본 라이브러리 등)은 파괴적이어도 리스트에 리스트에 요소를 추가한 뒤에 리스트 전체의 길이를 리턴하는 등 리턴값이 있는 경우도 있습니다. 따라서 "파괴적 함수는 무조건적으로 리턴값이 없다"라고 일반화 하기는 약간 애매합니다...!

    • @홍민표-s4r
      @홍민표-s4r 4 года назад

      @@윤인성 엄청 이른(늦은?) 시간인데도 친절한 답변 감사드립니다!!

  • @이용현-e8w
    @이용현-e8w 4 года назад +1

    추가로, 그럼 비파괴 함수와 파괴함수를 구분하는 내장함수가 구분을 참고할 수 있는 문서나 자료가 있을까요? 혹시 뒤에서 배우는 클래스 ( 객체 )라는 것 때문에 이런 내장함수가 구분이 되는건가요?

    • @윤인성
      @윤인성  4 года назад

      프로그래밍적으로
      - 속도를 중시하냐: 파괴적 함수
      - 안전성을 중시하냐: 비파괴적 함수
      로 구분해서 기본 라이브러리가 구성되어 있는데, 파이썬은 1991년의 컴퓨터 성능이 좋지 못할 때 나온 언어라 기본 라이브러리의 리스트 관련 함수가 파괴적으로 구현되었습니다. 더 이후에 나온 루비 등은 둘 다 제공하고, 거의 공식처럼 쓰는 파이썬 라이브러리 numpy는 비파괴적 함수를 제공합니다.
      구분할 수 있는 문서는 결국 파이썬 문서를 읽으며, 실행 결과를 보는 방법 밖에는 없습니다 😭

    • @이용현-e8w
      @이용현-e8w 4 года назад

      @@윤인성 결국은 반복숙달이네요ㅜㅠ

  • @aaronjanghyeokchoi4256
    @aaronjanghyeokchoi4256 4 года назад

    설명 감사드립니다. 터미널 말고 텍스트 입력기에서 말씀하신대로 append insert 등을 쳐도 도움말 같은게 바로 안나오는 데 설정에서 무언가 따로 해줘야하나요? 확인 부탁드립니다.

    • @윤인성
      @윤인성  4 года назад

      파이썬 확장 프로그램을 설치하셨는지 확인하시고,
      이 기능이 처음 열릴 때 시간이 좀 걸려서
      입력 하면서 보조 기능이 작동한 뒤(처음에는 문서 내부의 다른 단어가 나옵니다), 조금 대기해주세요!

  • @박재민-j3f
    @박재민-j3f 4 года назад

    윤인성님!
    리스트에서
    [ 1, 4, 5, 6, 7, 8] 같은 리스트를
    1 4 5 6 7 8 로 출력 할 수는 없나요?
    또 [“a”, “b”, “c”, “d”] 같은 리스트의 값을
    a b c d 같이 나열 할수 았는 키워드가 았나요?

    • @윤인성
      @윤인성  4 года назад

      관련된 내용이 이후에 map 함수를 다룰 때 나옵니다. 일단 다음과 같이 만들어서 print 함수로 출력하면 된다고 생각해주세요.
      " ".join(map(str, [1, 4, 5, 6, 7, 8]))

    • @박재민-j3f
      @박재민-j3f 4 года назад

      감사합니다 ^^
      항상 답글 달아주시는 윤인성님 정말 큰 도움을 주시는 군요 ㅎㅎ

  • @michaelkim733
    @michaelkim733 4 года назад

    선생님 non destructive 랑 immutable 이랑 같은건가요? 둘이 뭔 차이인지 잘 모르겠어요. 의미상으로는 유사한거 같은데...

    • @윤인성
      @윤인성  4 года назад

      넵 같은 표현입니다. 어떻게 동작하는지는 결국 모두 쓰고 모두 외우는 방법 밖에 없습니다[루비 등의 언어는 이게 구분이 어렵다고 insert!처럼 느낌표가 붙은 녀석은 파괴, 아니면 비파괴 되게 구분을 해놨는데, 대부분의 프로그래밍 언어는 그냥 외위야 합니다].

    • @michaelkim733
      @michaelkim733 4 года назад

      @@윤인성 리스트 기본 내장 함수들은 다 파괴적이라고 보면 될까요? 리스트 변수명 뒤에 점찍고 사용하는 함수들이요. 교재에 나와 있는건 다 돌려봤는데 점찍고 쓰는 것들은 다 파괴되는거 같아서요

    • @윤인성
      @윤인성  4 года назад

      파이썬의 리스트 기본 내장 함수는 대부분 파괴적 함수로 작동하므로 그렇게 외우셔도 됩니다.

  • @young7497
    @young7497 5 лет назад

    안녕하세요~ 강의 정말 잘 보고 있습니다.
    강의 보다가 문득 떠오른 게 있었습니다.
    혹시 += 같은 연산자도 파괴적이라고 봐야할까요?

    • @윤인성
      @윤인성  5 лет назад +1

      굉장히 심오하고 깊은 질문인데 @_@
      - 숫자, 문자열, 불 등의 기본 자료형이 가진 += 연산자는 비파괴적이다.
      - 리스트 등의 큰 자료형의 += 연산자는 extend() 연산자를 쉽게 사용할 수 있는 형태에 지나지 않으므로 파괴적이다.
      라고 보시면 될 것 같습니다.

    • @dreamworld5481
      @dreamworld5481 4 года назад +1

      @@윤인성 이렇게 해보시면,
      a = [1, 2]
      b=a
      b.append(3)
      print("a는",a,"b는",b)
      a = [1, 2]
      b=a
      b += [3]
      print("a는",a,"b는",b)
      결과: a는 [1, 2, 3] b는 [1, 2, 3]
      a는 [1, 2, 3] b는 [1, 2, 3]
      즉, 리스트 등의 큰 자료형 사이를 다룰 경우 다 파괴해버립니다. 심지어 a는 건들지도 않았는데 append나 +=나 관계없이 내부적으로(?) 연결된건 다 파괴해버리네요. a는 건들지도 않았는데 파괴된건 좀 심각한 충격이네요;; 근데 또 모든 사례에 대한건 아니고 일부만 이러는거 같아서 혼란스럽네요.. 그냥 아래처럼 +를 이용해 안전하게 쓰는 습관을 가져야겠습니다
      a = [1, 2]
      b=a
      b = b+ [3]
      print("a는",a,"b는",b)
      으로 안전하게 사용하면 결과는 a는[1,2] b는[1,2,3] 으로 괜찮아집니다만...위 사례는 파이썬만의 단점같이 느껴지네요

  • @서성원-v7z
    @서성원-v7z 4 года назад

    a = [1,2,3]일때 1번 위치에 리스트 [4,5,6]을 [] 기호 없이 출력하려면 어떻게 해야 하나요?
    insert를 사용하면 [4,5,6]처럼 []가 붙어서 나오더라구요..!

    • @윤인성
      @윤인성  4 года назад

      [4, 5, 6].join(", ")이라는 형태를 쓰면 됩니다!

  • @류상서
    @류상서 5 лет назад +1

    수고하셨습니다.
    감사합니다.^^

  • @seugnilhan392
    @seugnilhan392 4 года назад

    a.ex 까지만 쳐도 파라미터 설명이 나오는건 제 비쥬얼 스튜디오 코드에서 안뜨는데 따로 설정을 해야하나요? 어떻게 해야하는지 알 수 있을까요?

    • @윤인성
      @윤인성  4 года назад

      1. 아무 문제가 없다고 가정할 때 처음 읽어들일 때 시간이 좀 걸립니다. 기다려보고 다시 테스트 해보시기 바랍니다.
      2. 파이썬 확장 프로그램을 설치했는지 확인해주세요.
      3. 비주얼스튜디오코드가 이상하게 버그를 내면서 설치되면 안 될 때가 있습니다. 재설치해주세요!

  • @osreo77
    @osreo77 3 года назад

    2021년 3월 13일 수강완료

  • @서울시립
    @서울시립 5 лет назад

    님을 존경합니다. 저랑 같은 윤씨라서 무한 영광입니다. ^^

  • @이용현-e8w
    @이용현-e8w 4 года назад

    강사님! 질문이 있습니다!
    파괴적 함수는 값이 어느정도 증대할 지 모르기 떄문에 리턴값이 없으며 복사가 되지 않고 비파괴적 함수는 파괴적 함수와 상반된 결과로 리턴값이 있는거 같은데
    a = [1,2,3]에서 b = a.append[4]는 리턴값이 없기 때문에 b라는 새로운 변수에 대입이 되지 않는건가요?

    • @윤인성
      @윤인성  4 года назад

      넵 그렇습니다...!

  • @파파고-h1y
    @파파고-h1y 4 года назад

    항상 감사합니다

  • @한인철-b7h
    @한인철-b7h 5 лет назад

    다음 강의는 언제 올리시나요

    • @윤인성
      @윤인성  5 лет назад

      일주일에 4-5개는 올릴 수 있게 1-2일 간격으로 올라갑니다 'ㅁ' ...! 다만 오늘은 출판사 책 계약 일정으로 못 올릴 것 같고 내일 올릴 것 같습니다 'ㅁ' ...!

  • @서울꺼벙천사-i2m
    @서울꺼벙천사-i2m 4 года назад +2

    어느 강의에서나
    어떤 책에도 없는
    비파괴적 함수와
    파괴적 함수의 개념
    최고입니다

  • @alexo.7688
    @alexo.7688 3 года назад +1

    좋은 강의 감사합니다. 전체 강의 정주행 중이며, 책도 함께 보며 공부하고 있습니다.

  • @binoso8299
    @binoso8299 3 года назад +1

    강의 내용이 귀에 쏙쏙 들어오네요!!!! ^^*

  • @KyujinSim
    @KyujinSim 5 лет назад +2

    감사합니다. 독학에 많은 도움이 되고 있습니다.

  • @축잘알-n2b
    @축잘알-n2b 4 года назад +1

    파괴적, 비파괴적 함수가 원래같으면 이해가 안 되었을 것 같은데 설명을 잘 해주셔서 이해가 잘 되었네요 ㅎㅎ 감사합니다

  • @불티나-t4l
    @불티나-t4l 5 лет назад +1

    설명을 잘해주셔서 이해가 쉽네요. 감사합니다.

  • @RENDERDAY
    @RENDERDAY 5 лет назад

    오늘도 강의 잘~ 보고 갑니다.
    강의를 보다가 예전에 고민했던게 생각나서 적어봅니다.
    b= [1, 2, 3, 4]
    b.append(4)
    print(b)
    # print(b.append(4)) - None
    비파괴적인 함수는 print와 같이 넣으면 None이 됩니다. 이 자체가 말그대로 '비파괴적'인 이유가 아닐까 싶습니다.
    그와 다르게,
    파괴적인 함수는 아래와같이 print를 넣어도 이미 데이타가 바뀐거니 프린트가 가능한거라고 이해하는게 빠른것같습니다.
    c = "hello"
    print(c.upper() )
    # print를 넣어서 되느냐 안되느냐가 구분하기 쉬운게 아닐까 생각해봅니다 :)
    제가 일할때 쓰는 cg툴 들은 파이썬 창에 인터렉티브 쉘방식으로 쓸일이 없다보니. 결과가 다르게 나오는것에 대해 이해하고싶어 고민을 많이 했던적이 있습니다.

    • @윤인성
      @윤인성  5 лет назад

      앗 좋은 설명 방향 감사드립니다...!!

    • @dreamworld5481
      @dreamworld5481 4 года назад +2

      append가 파괴적인 함수고 upper()가 비파괴적인 함수 아닌가요?
      파괴, 비파괴는 원본값이변경됨 안됨이라고 이해하시면 좋을듯 합니다.
      b.append(4)가 파괴되어서 None이 아니고, print(b.append(4))가 None인 이유는 return이 없어서 그렇습니다. 원본값 b는 변경(파괴)되었구요.
      이에 반해 print(c.upper())는 return이 HELLO니까 출력이 되는겁니다. 원본값 c는 변경되지 않았기(비파괴) 때문에 그대로 hello구요.

  • @임효정-p1n
    @임효정-p1n 4 года назад

    설명 진짜 잘하시는 것 같아요 감사합니다!!

  • @가을하늘-g8n
    @가을하늘-g8n 4 года назад

    설명 잘 듣고 있습니다 .감사합니다. ~

  • @hermeskim11
    @hermeskim11 3 года назад

    감사합니다