신혜선

- 무슨말인지 하나도 몰랐어요

- 요즘 학생들이 많이 쓰는 말인것은 알겠음

- 멈춰까지 유행어였음!! (몰랐어요, 댓글보고 알았음)

멈춰?

Step1: 멈춰의 원조: 학교폭력, 멈춰~

Step2: 갑자기 뒤늦게 재미있음 $\to$ 밈화

- ㅇㅇㅇ, 멈춰~~~!로 따라하기 시작함

  • 코스피하락, 멈춰~
  • 세균, 멈춰~
  • 수강신청 매크로, 멈춰~

밈이란 무엇인가?

- 밈이란? 복제가능한 something

  • 이기적 유전자에서 제시한 개념
  • 유전자는 (1) 복제 (2) 변형되면서 전파되는 속성이 있다는 사실을 관찰
  • 종교, 사상, 이념도 유전자처럼 (1) 복제 (2) 변형되면서 전파되더라..
  • 밈 = 유전자의 일반화된 개념 = 복제가능한 something

밈을 컨텐츠화하여 보자.

- 예제1: 원본

print("학교폭력")
학교폭력
from PIL import Image
display(Image.open('2022-01-02-stop1.jpeg'))
print("멈춰~~~~~")
멈춰~~~~~

- 예제2: 코스피하락

print("코스피하락,")
코스피하락,
display(Image.open('2022-01-02-stop1.jpeg'))
print("멈춰~~~~~")
멈춰~~~~~

- 예제3: 수강신청 매크로 멈춰

print("수강신청 매크로,")
수강신청 매크로,
display(Image.open('2022-01-02-stop1.jpeg'))
print("멈춰~~~~~")
멈춰~~~~~

코드의 정리

- 정리해보자.

start = "학교폭력" 
img = '2022-01-02-stop1.jpeg'
end = "멈춰~~~~~~~" 
def memeshow(start, img, end):
    print(start) 
    display(Image.open(img))
    print(end)

- 예제1을 재생성

memeshow(start,img,end)
학교폭력
멈춰~~~~~~~

- 예제2를 재생성

start = "코스피 하락," 
memeshow(start,img,end)
코스피 하락,
멈춰~~~~~~~

- 예제3의 재생성

start = "수강신청 매크로," 
memeshow(start,img,end)
수강신청 매크로,
멈춰~~~~~~~

클래스가 없다면?

- 코드를 정리하다 보니까 살짝 비효율적인 느낌이 있음

  • major: 여러개의 콘텐츠를 동시에 관리하기가 힘들다.
  • minor: start, img, end와 같은 변수들이 정리가 되어있지 않고 산만한 느낌이 든다.

부장님: 예제1을 생성하라

start = "학교폭력, " 
memeshow(start,img,end)
학교폭력, 
멈춰~~~~~~~

부장님: 예제2를 생성하라.

start = "코스피하락,"
memeshow(start,img,end)
코스피하락,
멈춰~~~~~~~

부장님: 예제2에서 멈춰~ㅠㅠ 로 바꿔봐라. 좀 더 간절함이 느껴지도록..

end = "멈춰~~~ㅠㅠ"
memeshow(start,img,end)
코스피하락,
멈춰~~~ㅠㅠ

부장님: OK 다시 예제1로 가봐

start = "학교폭력,"
memeshow(start,img,end)
학교폭력,
멈춰~~~ㅠㅠ

부장님: 아니, 멈춰는 그대로 해야지. 여기서 우니까 애들이 더 괴롭힐것 같잖아

end = " 멈춰~~~~" 
memeshow(start,img,end)
학교폭력,
 멈춰~~~~

부장님: OK. 이제 이미지를 바꿔보자 신혜선 나오는것 어떰? 내가 신혜선 좋아함.

img = '2022-01-02-stop2.png' 
memeshow(start,img,end)
학교폭력,
 멈춰~~~~

부장님: 좋다. 이제 2개의 컨텐츠를 동시에 보여봐. 점검을 해보자.

(예제1)

start= "학교폭력,"
img = "2022-01-02-stop2.png"
end = "멈춰~~~~" 
memeshow(start,img,end)
학교폭력,
멈춰~~~~

(예제2)

start= "코스피하락,"
img = "2022-01-02-stop1.jpeg"
end = "멈춰~~ㅜㅜ" 
memeshow(start,img,end)
코스피하락,
멈춰~~ㅜㅜ

클래스의 활용

- 클래스가 없다면? 살짝 비효율적인 느낌이 있음

  • major: 여러개의 콘텐츠를 동시에 관리하기가 힘들다. (예제1, 예제2 동시에 관리하니까 힘들었어요)
  • minor: start, img, end와 같은 변수들이 정리가 되어있지 않고 산만한 느낌이 든다.

- HWP를 켜서 부장님의 지시를 수행했다면?

  • 부장님의 공통 지시사항을 추린다. (start, img, end와 같은 요소가 필요하고 그림을 삽입하는 기술도 필요하겠음)
  • 소스가 되는 hwp파일을 하나 만든다. 복사를 위한 틀이다. 파일이름은 KBS.HWP라고 하자.
  • KBS.HWP파일을 복사 $\to$ stop1.hwp, stop2.hwp 파일을 만든다. 그리고 부장님이 지시사항이 있을때마다 stop1.hwp, stop2.hwp의 내용을 각각 수정한다.

- 단점이 극복될까요?

  • major: 여러개의 콘텐츠를 동시에 관리하기가 힘들다. $\to$ 샘플파일과 각각의 복사본을 나누어서 독립적으로 관리하므로 이 문제는 해결
  • minor: start, img, end와 같은 변수들이 정리가 되어있지 않고 산만한 느낌이 든다. $\to$ stop1.hwp, stop2.hwp와 같은파일안에 내용이 있으므로 산만하지 않음.

- 방금 말한 HWP와 같은 방식을 코딩에 적용해보자.

class KBSHWP: 
    start = '학교폭력,' 
    img = '2022-01-02-stop1.jpeg'
    end = '멈춰~~~~' 
    def memeshow(self): ## 규칙1: class안에 정의된 함수의 첫번째 인자는 무조건 self 
        print(self.start) ## 규칙2: class안에 정의된 변수를 쓰려면 self.변수이름 과 같은 형식으로 써야함 
        display(Image.open(self.img)) # 규칙2 적용
        print(self.end) # 규칙2 적용 

부장님: 예제1을 생성하라

stop1 = KBSHWP()
stop1.memeshow()
학교폭력,
멈춰~~~~

부장님: 예제2를 생성하라.

stop2 = KBSHWP()
stop2.start = '코스피하락,' 
stop2.memeshow()
코스피하락,
멈춰~~~~

부장님: 예제2에서 멈춰~ㅠㅠ 로 바꿔봐라. 좀 더 간절함이 느껴지도록..

stop2.end = '멈춰~ㅠㅠ'
stop2.memeshow()
코스피하락,
멈춰~ㅠㅠ

부장님: OK 다시 예제1로 가봐

stop1.memeshow()
학교폭력,
멈춰~~~~

부장님: 아니, 멈춰는 그대로 해야지. 여기서 우니까 애들이 더 괴롭힐것 같잖아

부장님: OK. 이제 이미지를 바꿔보자 신혜선 나오는것 어떰? 내가 신혜선 좋아함.

stop1.img = '2022-01-02-stop2.png'
stop1.memeshow()
학교폭력,
멈춰~~~~

부장님: 좋다. 이제 2개의 컨텐츠를 동시에 보여봐. 점검을 해보자.

(예제1)

stop1.memeshow()
학교폭력,
멈춰~~~~

(예제2)

stop2.memeshow()
코스피하락,
멈춰~ㅠㅠ

클래스공부 1단계

클래스의 성능

성능1: 틀만있으면 여러개의 독립적인 컨텐츠를 생성할 수 있다.

stop1 = KBSHWP()
stop2 = KBSHWP()

성능2: 생성된 컨텐츠(=인스턴스, 오브젝트)에서 .을 찍고 접근할 수 있는 여러 자료들에 접근가능하고 그 내용물도 바꿀 수 있다.

stop2.start
'학교폭력,'
stop2.start = '코스피하락,' 
stop2.start
'코스피하락,'

성능3: 생성된 컨텐츠(=인스턴스, 오브젝트)에서 .을 찍고 쓸 수 있는 자체적인 함수(=메소드)를 독립적으로 사용할 수 있다.

stop1.memeshow()
학교폭력,
멈춰~~~~

성능 4,5,6.... 그 밖의 미공개된 성능이 많음

클래스 사용법 (암기)

- 선언하는 방법 (= 양식문서를 만드는 방법)

class KBSHWP: ## 양식의 이름을 설정 
    start = '학교폭력,' ## 양식에 포함된 변수 1  
    img = '2022-01-02-stop1.jpeg' ## 양식에 포함된 변수2 
    end = '멈춰~~~~'  ## 양식에 포함된 변수3 
    def memeshow(self): ## 양식에 포함된 함수1 = 메소드1 
        print(self.start) 
        display(Image.open(self.img)) 
        print(self.end)
  • 규칙1: 메소드(=class안에서 정의된 함수)의 첫번째 인자는 무조건 self
  • 규칙2. 메소드에서 class안에서 정의된 변수를 사용하려면 self.변수이름과 같은 꼴로 써야한다.
    • self.start, self.img, self.end와 같은 방식으로 써야 한다.
    • KBSHWP.start, KBSHWP.img, KBSHWP.end 와 같은 방식으로 쓰는 경우도 가끔있다. (필요에 따라)

- 성능1을 사용하는 방법: 클래스에서 인스턴스를 생성하는 방법

stop1 = KBSHWP() ## 
stop2 = KBSHWP() 
  • 함수사용법이랑 비슷
  • 클래스 이름을 쓰고 콘텐츠를 구체화하는 과정에서 필요한 입력1, 필요한 입력2 를 ()에 넣는다.
  • 현재는 따로 들어가는 입력이 없으므로, 그냥 KBSHWP 이후에 입력을 비워둔다. 즉 KBSHWP()로 생성.

- 성능2를 사용하는 방법: 인스턴스에서 .을 찍고 접근하고 싶은 속성에 접근, 혹은 변경

stop2.start
'학교폭력,'
stop2.start = '코스피하락,' 
stop2.start
'코스피하락,'

- 성능3을 사용하는 방법: 인스턴스에서 .을 찍고 사용하고 싶은 메소드를 사용

stop2.memeshow()
학교폭력,
멈춰~~~~

연습문제

문제1: 강의노트를 참고하여 아래의 기능을 가진 클래스를 구현하라. 클래스 이름은 KBSHWP2로 하라.

class KBSHWP2: 
    title = '[컨텐츠1]'
    start = '학교폭력,' 
    img = '2022-01-02-stop1.jpeg'
    end = '멈춰~~~~' 
    def memeshow(self): 
        print(self.title)
        print(self.start) 
        display(Image.open(self.img)) 
        print(self.end) 
stop3=KBSHWP2()
stop3.memeshow()
[컨텐츠1]
학교폭력,
멈춰~~~~

문제2: 아래와 같은 클래스를 구현하라.

- 클래스내에는 변수 a가 있다. 변수 a의 초기값은 True이다.

- 클래스에는 show()라는 메소드가 있다. show()의 기능은 a값을 출력하는 것이다.

(풀이)

class AAAA:
    a= True
    def show(self):
        print(self.a)
aaaa = AAAA()
aaaa.a
True
aaaa.show()
True
aaaa.a = False
aaaa.show()
False

문제3: 아래와 같은 기능을 가지는 클래스를 구현하라.

- 클래스내에는 변수 a가 있다. 변수 a의 초기값은 1이다.

- 클래스에는 up()이라는 메소드를 가지고 있다. 이 메소드의 기능은 a의 값을 1증가시키는 것이다.

(풀이)

class Temp:
    a= 1 
    def up(self):
        self.a=self.a+1
temp= Temp()
temp.a
1
temp.up()
temp.a
2

문제4: 아래와 같은 기능을 가진 클래스를 구현하라.

- 클래스내에는 변수a가 있다. 변수a의 초기값은 0이다.

- 클래스에는 up(), down(), show() 라는 메소드가 있다. 각각의 기능 a의 값을 1증가, 1감소, 출력 하는 기능을 가진다.

(힌트)

class Temp2:
    a = 0 
    def up(self): 
        self.a= self.a+1 
    def down(self): 
        self.a = self.a-1 
    def show(self):
        print(self.a)
temp = Temp2()
temp.a
0
temp.down()
temp.show()
-1
temp.up()
temp.up()
temp.show()
1

문제5: 아래와 같은 기능을 가지는 클래스를 구현하라.

- 기능1: 2022-01-02-stop1.jpeg을 보여줌

- 기능2: 당신은 이 그림을 n번 보았습니다.를 출력 여기에서 $n$은 그림을 본 횟수

class Temp3:
    n=1 
    img= '2022-01-02-stop1.jpeg' 
    def show(self):
        display(Image.open(self.img)) 
        print('당신은 이그림을 %s 번 보았습니다' % self.n)
        self.n=self.n+1
temp3 = Temp3()
temp3.show()
당신은 이그림을 1 번 보았습니다
temp3.show()
당신은 이그림을 2 번 보았습니다
temp3.show()
당신은 이그림을 3 번 보았습니다
temp4 = Temp3()
temp4.img = '2022-01-02-stop2.png'
temp4.show()
당신은 이그림을 1 번 보았습니다
temp4.show()
당신은 이그림을 2 번 보았습니다
temp3.show()
당신은 이그림을 4 번 보았습니다
temp4.show()
당신은 이그림을 3 번 보았습니다