[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
오늘은 객체지향 프로그래밍의 꽃 클래스
를 배웠다.
클래스를 가장 쉽게 설명할 수 있는 방법 중 하나는, 붕어빵이다.
붕어빵 틀에서 붕어빵을 여러 개 만들어 낸다.
그것처럼 클래스도 여러 개의 인스턴스를 만들어 낸다.
그리고 클래스는 함수
와 변수
를 포함해야 한다.
나중에도 매우 많이 사용될 중요하고 기초적인 부분이기 때문에,
그 개념을 잘익히기 위해 연습문제를 다시 풀어보았다.
class Dog:
def __init__(self, Breed = '?', Size = '?', Age = '?', Color = '?' ):
self.__Breed = Breed
self.Size = Size
self.Age = Age
self.Color = Color
# class명을 적을 때는 항상 맨 앞글자가 대문자여야 한다. 그래서 Dog
# __init__은 클래스의 배경이라고 생각하면 된다.
# 매개변수의 self는 class로 만들어질 instance 자기 자신을 가리킬 때 사용
# 조건 2의 필드를 적어준다. 여기서, 조건 1을 지켜주기 위해 매개변수에 ?(잘모른다는 뜻)을 default 값이 되게 해준다.
# def의 하위코드에서는 인스턴스가 만들어질 때 매개변수에 들어올 값이 자기 자신에게 적용되도록 하는 것을 볼 수 있다.
# 여기서 조건 3을 지키기 위해, Breed 앞에 언더바 2개(__)를 붙여 비공개 필드로 만들어준다.
비공개 필드란?
외부에서 직접 사용하지 못하고 클래스 내부에서만 사용가능 한 필드
def Eat(self):
print(f'{self.Color} 색상의 개가 먹이를 먹습니다.')
def Sleep(self):
print(f'{self.Color} 색상의 개가 잠을 자고있습니다.')
def Sit(self):
print(f'{self.Color} 색상의 개가 앉습니다.')
def Run(self):
print(f'{self.Color} 색상의 개가 뛰어 다닙니다.')
# 각 행동들에 어울리는 출력문이 나오게 작성했다.
# 여기서 f`string의 {self.Color}란 개 인스턴스들이 갖게될 색상을 의미한다.
def getBreed(self):
return self.__Breed # getBreed() 메소드를 사용하면, Breed의 값을 반환해준다.
def setBreed(self, Breed):
self.__Breed = Breed # setBreed(Breed) 메소드를 사용하면, 인스턴스의 Breed 값을 변경해준다.
def getSize(self):
return self.Size
def setSize(self, Size):
self.Size = Size
def getAge(self):
return self.Age
def setAge(self, Age):
self.Age = Age
def getColor(self):
return self.Color
def setColor(self, Color):
self.Color = Color
# 조건 3에서 breed를 비공개 필드로 설정해 놓았다.
# 그래서 클래스로 인스턴스를 만들어서 print(인스턴스.Breed)를 하게 된다면 에러가 난다.
# 이런 이유로 각 필드들을 쉽게 불러오고 변경할 수 있는 함수를 만들었다.
# Breed, Size, Age, Color 4개의 필드
dog1 = Dog('Neapolitan Mastiff', 'Large', 5, 'Black')
dog2 = Dog('Maltese', 'Small', 2, 'White')
dog3 = Dog('Chow Chow', 'Medium')
dog4 = Dog()
# Dog 클래스를 사용해 dog1...dog4를 만들어준다.
# dog1은 주어진 인수 4개 다 입력
# dog2도 주어진 인수 4개 다 입력
# dog3는 앞의 인수 2개만 입력
# dog4는 입력 X
def dogInfo(name):
print(f'품종: {name.getBreed()}')
print(f'크기: {name.getSize()}')
print(f'나이: {name.getAge()}')
print(f'색상: {name.getColor()}')
dog4.setBreed('Jindo') # dog4의 Breed를 Jindo로 변경
dog4.setColor('Yellow') # dog4의 Color를 Yellow로 변경
dog1.Eat() # Eat메소드 확인
dog2.Sleep() # Sleep메소드 확인
dog3.Sit() # Sit메소드 확인
dog4.Run() # Run메소드 확인
dogInfo(dog1)
dogInfo(dog2)
dogInfo(dog3)
dogInfo(dog4)
# 클래스 밖에서 dogINfo함수를 생성했다.
# dog1~4를 넣어서 출력한다.
이제 적은 코드들의 결과를 확인해보자. Default값과 메소드들이 잘 적용된 상태로 출력된다.
Black 색상의 개가 먹이를 먹습니다.
White 색상의 개가 잠을 자고있습니다.
? 색상의 개가 앉습니다.
Yellow 색상의 개가 뛰어 다닙니다.
품종: Neapolitan Mastiff
크기: Large
나이: 5
색상: Black
품종: Maltese
크기: Small
나이: 2
색상: White
품종: Chow Chow
크기: Medium
나이: ?
색상: ?
품종: Jindo
크기: ?
나이: ?
색상: Yellow
파이썬에는 특별한 메소드가 존재한다. 그것을 매직 메소드(Magic Method)
라고 부른다. __메소드이름__
의 형태를 가지고 있는데 인스턴스를 생성하고 계산을하거나 비교를 할 때 사용할 수 있는 다양한 메소드를 가지고 있다.
위의 1번 문제를 푼 상태에서, 특별한 메소드를 사용하여 더 깊이 파이썬을 연구해보자!
다양한 매직 메소드가 존재하지만 위의 조건을 충족하며 사용할 메소드를 나열해보겠다.
__ge__() : >=
__gt__() : >
__lt__() : <
__le__() : <=
__ne__() : !=
__eq__() : ==
__add__() : +
__sub__() : -
__mul__() : *
__divmod__() : //, %
__init__() : 생성자, 초기화
__repr__() : 어떤 객체의 ‘출력될 수 있는 표현’(printable representation)을 문자열의 형태로 반환
Dog 클래스로 만든 객체 간의 Size 크기를 비교하는 메소드를 작성
def __gt__(self, other): # greater than
return self.Size > other.Size # self인스턴스 사이즈가 other인스턴스 사이즈보다 크다.
def __ge__(self, other): # greater equal
return self.Size >= other.Size #self인스턴스 사이즈가 other인스턴스 사이즈보다 같거나 크다.
def __lt__(self, other): # less than
return self.Size < other.Size # self인스턴스 사이즈가 other인스턴스 사이즈보다 작다.
def __le__(self, other): # less equal
return self.Size <= other.Size # self인스턴스 사이즈가 other인스턴스 사이즈보다 같거나 작다.
def __eq__(self, other): # equal
return self.Size == other.Size # self인스턴스 사이즈가 other인스턴스 사이즈가 같다.
def __ne__(self, other): # not equal
return self.Size != other.Size # self인스턴스 사이즈가 other인스턴스 사이즈가 같지 않다.
# 위에 설명했듯이 비교할때 사용하는 특별한 메소드다.
# 조건에서는 Size의 크기를 따질 수 있는 비교 메소드다.
# 비교를 통해 True나 False값을 반환해준다.
dog1의 Size는 Large, dog2의 Size는 Small이다.
print(dog1 > dog2)
print(dog1 >= dog2)
print(dog1 < dog2)
print(dog1 <= dog2)
print(dog1 == dog2)
print(dog1 != dog2)
False
False
True
True
False
True
print(ord('L')) # Large
print(ord('M')) # Medium
print(ord('S')) # Small
76 # Large
77 # Medium
83 # Small
def __gt__(self, other):
return self.Size < other.Size
def __ge__(self, other):
return self.Size <= other.Size
def __lt__(self, other):
return self.Size > other.Size
def __le__(self, other):
return self.Size >= other.Size
def __eq__(self, other):
return self.Size == other.Size
def __ne__(self, other):
return self.Size != other.Size
True
True
False
False
False
True
Dog 클래스로 만든 객체 간의 Age를 더하고, 빼고, 곱하고, 나누는 메소드 작성
def __add__(self, other):
return self.Age + other.Age
def __sub__(self, other):
return self.Age - other.Age
def __mul__(self, other):
return self.Age * other.Age
def __divmod__(self, other):
return (self.Age // other.Age, self.Age % other.Age)
# 인스턴스의 필드값들을 연산하기 위해 저 메소드들을 사용했다.
# 순서대로 덧셈, 뺄셈, 곱셉, 나눗셈의 몫과 나머지
dog1의 Age는 5, dog2의 Age는 2
print(dog1 + dog2)
print(dog1 - dog2)
print(dog1 * dog2)
print(divmod(dog1, dog2))
7
3
10
(2, 1) # (몫, 나머지)
1번 문제에서 객체의 정보를 함수를 통해 출력했었는데, 매직 메소드를 사용해서 출력해보시오.
1번 문제에서 객체의 정보들을 출력했을 때 결과는 이렇다.
품종: Neapolitan Mastiff
크기: Large
나이: 5
색상: Black
품종: Maltese
크기: Small
나이: 2
색상: White
품종: Chow Chow
크기: Medium
나이: ?
색상: ?
품종: Jindo
크기: ?
나이: ?
색상: Yellow
나는 여기서 객체를 출력될 수 있는 표현을 하게 만들어주는 매직메소드인 __repr__
메소드를 사용할 것이다.
def __repr__(self):
return f'품종: {self.__Breed}\n크기: {self.Size}\n나이: {self.Age}\n색상: {self.Color}'
# Breed, Size, Age, Color 순으로 나오게 출력문을 구성하고 return 값을 반환해라.
print(dog1)
print(dog2)
print(dog3)
print(dog4)
품종: Neapolitan Mastiff
크기: Large
나이: 5
색상: Black
품종: Maltese
크기: Small
나이: 2
색상: White
품종: Chow Chow
크기: Medium
나이: ?In
색상: ?
품종: Jindo
크기: ?
나이: ?
색상: Yellow
잘 출력되는 것을 확인할 수 있다!!!
인간이 부모가 자식에게 재산을 물려주는 것과 같은 상속이 파이썬의 클래스에도 존재한다.
클래스의 구성 요소를 상속 해주는 부모 클래스(Super Class)
와 상속을 받는 자식 클래스(Sub Class)
로 나눌 수 있다.
예를 들어, 자동차
라는 객체를 만들기 위한 클래스가 존재한다. 자동차에는 일반 승용차와 트럭 등 일반적인 구성요소가 같지만 용도나 생김새가 다른 종류의 자동차도 존재한다. 그래서 자동차 클래스
의 구성요소를 승용차 클래스
와 트럭 클래스
가 받아서 각 클래스들이 자신들의 필요에 의해 추가해야 하거나 빼야하는 부분들을 건들여서 인스턴스를 생성할 수 있는 것이다. 이 때 자동차 클래스가 부모 클래스
, 트럭이나 승용차 클래스가 자식 클래스
다.
비슷한 예제로 개념을 확실히 이해해보자.
우리 지구에는 동물과 식물이 있다. 동물이 식물과 다른 점이 있다면 그것은 아마도 소리를 낼 수 있다는 것이다. 그런 동물 중에서도 사람, 개, 고양이 등 다양한 동물이 존재하고 있다. 동물의 종류마다 소리를 내는 방식이 다르고, 외형, 사는 곳 등 여러가지가 다를 것이다.
동물을 부모클래스로 개나 고양이 등의 자식클래스를 만들어 보자.
class Animal:
count = 0 # 자식 클래스를 포함한 여러 클래스에서 공유할 변수다.
def __init__(self, age='?', leg='?', color='?', place='?'):
self.age = age
self.leg = leg
self.color = color
self.place = place
Animal.count += 1
print(f'{Animal.count}번째 동물이 탄생했습니다.')
# Animal 클래스의 배경을 깔아준다(생성자). 각 매개변수들의 기본값을 내 주관대로 ?로 지정
# 매개변수에 입력되는 값으로 self.필드의 값이 변하게 해준다.
# 그리고 한 마리의 동물이 생성될 때마다 count의 수가 올라가게 클래스 변수를 사용해준다.
# 클래스 변수 Animal.count는 Animal을 포함한 자식클래스들이 객체를 생성할 때마다 1씩 추가된다.
# 그리고 생성될 때마다 'n'번째 동물이 탄생되었다는 알림을 출력해준다.
def talk(self):
print('hmm..') # 모든 동물이 낼 수 있는 숨소리 'hmm..'을 talk() 메소드로 생성
def eat(self):
print('eating') # 먹는다는 것을 뜻하는 'eating'을 eat() 메소드로 생성
def sleep(self):
print('zzz...') # 잠자는 것을 표현하는 'zzz..'를 sleep() 메소드로 생성
def __repr__(self):
return f'나이: {self.age}\n다리 개수: {self.leg}\n색상: {self.color}\n사는 곳: {self.place}'
# 문제 2번에서 사용한 것처럼 인스턴스를 '표현'하기 쉽게 만드는 __repr__ 메소드 사용
class Dog(Animal): # class 자식클래스(부모클래스):
def __init__(self, age, leg, color, place, hairLen):
# 개는 털이 있는 동물이라서 털이 장모인지 단모인지 뜻하는 hairLen 필드 추가
super().__init__(age, leg, color, place)
# 부모(super) 클래스 Animal에게 물려받을 구성요소를 정하는 코드
self.hairLen = hairLen # 추가한 필드와 매개변수를 이어줌
def talk(self):
print('Wal! Wal Wal!!') # 조건 2번. 개는 '왈! 왈!왈!' 짓는다. talk() 재정의
def __repr__(self):
return f'나이: {self.age}\n다리 개수: {self.leg}\n색상: {self.color}\n사는 곳: {self.place}\n털 길이: {self.hairLen}'
# Dog 클래스를 사용해 만든 인스턴스의 정보를 출력하기 편하게 만듦.
class Cat(Animal): # class 자식클래스(부모클래스):
def __init__(self, age, leg, color, place, hairLen):
# 고양이도 털이 있는 동물이라서 털이 장모인지 단모인지 뜻하는 hairLen 필드 추가
super().__init__(age, leg, color, place)
# 부모(super) 클래스 Animal에게 물려받을 구성요소를 정하는 코드
self.hairLen = hairLen # 추가한 필드와 매개변수를 이어줌
def talk(self):
print('Meow~~~~') # 조건 3번. 고양이는 '미유~' 하고 소리를 낸다. talk() 재정의
def __repr__(self):
return f'나이: {self.age}\n다리 개수: {self.leg}\n색상: {self.color}\n사는 곳: {self.place}\n털 길이: {self.hairLen}'
# Cat 클래스를 사용해 만든 인스턴스의 정보를 출력하기 편하게 만듦.
animal1 = Animal(place = 'sea') # animal1에 Animal 클래스의 객체 생성
print(animal1)
1번째 동물이 탄생했습니다.
나이: ?
다리 개수: ?
색상: ?
사는 곳: sea
매개변수 place = ‘sea’와 나머지 디폴드 값이 잘 적용되어 정보가 출력되었고, 첫 객체 생성으로 ‘1번째 동물이 탄생했다는 ‘ 알람이 출력된다.
cat1 = Cat(3, 4, 'white', 'land', 'short')
dog1 = Dog(1, 4, 'black', 'land', 'long')
# 순서대로 나이, 다리의 개수, 색상, 사는곳, 털의 길이
cat1.talk() # 자식 클래스에서 재정의한 talk()
dog1.talk() # 자식 클래스에서 재정의한 talk()
print(dog1) # 인스턴스의 정보 출력
print(cat1)
2번째 동물이 탄생했습니다.
3번째 동물이 탄생했습니다.
Meow~~~~
Wal! Wal Wal!!
나이: 1
다리 개수: 4
색상: black
사는 곳: land
털 길이: long
나이: 3
다리 개수: 4
색상: white
사는 곳: land
털 길이: short
animals = [Cat(1,4,'white','land','long'), Cat(5,4,'gray','land','short'), Dog(2,4,'black','land', 'long')]
for animal in animals:
animal.talk()
4번째 동물이 탄생했습니다.
5번째 동물이 탄생했습니다.
6번째 동물이 탄생했습니다.
Meow~~~~
Meow~~~~
Wal! Wal Wal!!
사실 수업을 파이썬 기초 수업을 들으며 제일 어려웠던 부분은 아니였다. 하지만 서비스를 만들거나 무엇인가를 할 때 처음 만들어놓은 대로 사용하는 것이 아니라
'’다양한 니즈나 필요에 맞춰 바꿀 때 써먹을 때 큰 틀을 두고 이런 개념으로 사용할 수도 있겠구나.’
라는 생각을 하게 되었다.
클래스가 객체지향 프로그래밍의 꽃
인 이유를 확장성
이라고 생각하면 되려나?…
사실 적으면서도 무슨 말을 하려는지 잘 모르겠지만..ㅋㅋㅋ
나중에 과정이 끝나고 무언갈 만들어볼 때 유용하게 써먹어야겠다. 📷
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!