fruits에 과일 이름들을 담고

colors에는 색깔들을 담았다.

 

그리고 fruits에 colors로 이름을 지어주도록 한다.

# fruits에 과일 이름 담기
fruits = c('kiwi', 'banana')

# colors에 컬러명 담기
colors = c('green', 'yellow')

# fruits 데이터에 colors를 컬럼명으로 부여하기
names(fruits) = colors

# 결과 확인
fruits

 

결과는 아래와 같다.

names(데이터) = 컬럼명

'데이터 분석' 카테고리의 다른 글

R의 벡터 연산  (0) 2022.06.11

포토샵이 구독형태가 되면서 사용하지 않은지 정말 오래되었다.

한번만 설치하면 되던 시절이 그립다. 요즘은 무슨 프로그램이든 한달에 얼마씩 내는 구독형이니 정말 부담스럽다...

 

그런데 다행히도! 정말 자비로운 누군가가 포토샵과 비슷한 프로그램을 웹상에 만들어두고 무료로 서비스해주고 있다.

'포토피아'이다.

 

 

https://www.photopea.com/

 

Photopea | Online Photo Editor

✕ Photopea: advanced photo editor Free online photo editor supporting PSD, XCF, Sketch, XD and CDR formats. (Adobe Photoshop, GIMP, Sketch App, Adobe XD and CorelDRAW). Create a new image or open existing files from your computer. Save your work as PSD (

www.photopea.com

 

물론 포토샵을 완벽히 대체할 수는 없지만, 거의 모든 기능을 갖추고 있다. 필터까지도. 

단축키도 잘 된다. 몇번 사용해보니 픽슬러보다 훨씬 낫다고 느꼈다.(이는 개인적인 느낌이다)

 

포토샵을 다뤄본 사람은 별다른 학습없이 몇분 사용해보면 다 파악될 정도로 포토샵과 사용법이 거의 같다.

처음 접속하면 이런 프로젝트 관리 화면이 뜬다.

새 프로젝트를 클릭해도 되고, 곧바로 상단 메뉴에서 '파일'메뉴로 가서 작업을 시작해도 된다.

 

포토샵처럼 PSD파일을 기반으로 한다.

 

 

이렇게 레이어 작업도 다 되고 왠만한 간단한 작업은 다 된다.

단축키도 거의 동일한 듯 하다. 별로 불편할 것도 없다(무료라는 점을 생각하면!)

 

 

 

포토피아를 알고 나서 포토샵이 없어 아쉬운 일은 아직 없다. 물론 더 세밀한 그래픽 작업을 하려면 포토샵이 필요하겠지만 지금은 그럴 일이 없으므로 포토피아만으로도 충분하다.

 

듣자하니 대학생이 1년동안 혼자 만들었다고 하던데, 세상엔 천재가 참 많구나.

 

 

 

 

+ 픽슬러보다 가볍다고 느꼈는데 사실이었다.

픽슬러는 어도비의 플래시 기반이었고, 포토피아는 픽슬러보다 나중에 나와서 플래시 기반이 아닌 html5와 자바스크립트로 만들었다고 한다.

자바스크립트로 이런 것도 만들 수 있구나.......

그러니 픽슬러보다 훨씬 매끄럽고 가볍게 돌아간 것...

 

정말정말 간단하고 별거 없는, 파워포인트로 책 표지 만드는 방법~

 

 

먼저 파워포인트를 열고 '새 프레젠테이션'을 하나 만든다.

 

 

그리고 메뉴에서 '디자인' 탭으로 간다.

 

'디자인' 탭을 클릭 후 나타나는 아래메뉴에서 맨 오른쪽으로 가면 '슬라이드 크기'가 있다.

그리고 '페이지 설정'을 클릭한다.

 

A4 용지를 선택 해주고,

 

 

 

A4 용지를 세로로 돌리기 위해 아래의 하늘색 동그라미 친 부분을 클릭한다.



'슬라이드 수'가 무슨 의미인지는 모르겠지만; 위처럼 저 부분을 클릭하면 A4용지를 세로로 세운 형태가 된다.

 

확인을 누르면

 

 

위와 같은 창이 뜨는데 배율 확대건 배율 축소건 무엇을 선택하던 상관없다. 이후의 작업에 아무런 영향을 주지 않는다.

 

이 메세지는 현재 작업중인 페이지에 글이나 이미지가 들어있을 때, 용지 크기 변경하면서 걔네들은 어떻게 할건지 물어보는 것이다.

지금은 작업 페이지에 아무것도 없으므로 두 옵션 중 아무거나 선택해도 된다.

 

 

 

 

이렇게 세로형 A4용지가 되었다.

 

 

이제 알맞는 글귀를 넣어주고

 

 

 

 

책 표지에 어울리는 그림을 하나 넣어보자.

 

아래처럼 '삽입' 탭으로 가서 '그림 삽입'으로 이동 후, '온라인 그림 삽입'을 클릭한다.

인터넷에서 그림을 가져오는 기능이다.

 

 

그러면 아래처럼 오른쪽에 검색창이 뜬다.

'유니콘 일러스트'라고 검색어를 넣었다.

 


여기서 중요한 팁!!!

 

검색 단어 뒤에 '일러스트'나 '클립아트'를 붙이면 삽화로 쓸만한 예쁜 그림들이 뜬다.


어쨌든 아래처럼 '유니콘 일러스트'로 검색을 하면

 

 

 

 

 

결과들이 나오니 여기서 적당한 그림을 선택하자.

그리고 아래에 가서 '삽입'버튼을 클릭한다.

 

 

 

 

 

이렇게 그림이 잘 들어왔다.

 

 

 

 


 주의사항

가끔 '온라인 그림 삽입'에서 그림이 다운되지 않는다며 에러가 뜰 때가 있는데 그 이미지에 불펌 금지가 걸려있기 때문이다.

그럴 때는 어쩔 수 없다. 다른 이미지를 선택해야 한다.

 

 

또 한가지 더 팁!!!

온라인 그림으로 예쁜 디자인 가져오기

 

그냥 실물사진이 필요하다면 상관없지만, 예쁜 그림을 얻고 싶다면 옵션을 조금 바꿔줘야 한다.

 

만약, 사과를 검색하면 아래처럼 실물 사진 위주로 뜬다.

 

 

 

내가 원하는 게 실사가 아닌 예쁜 그림이라면, '필터' 혹은 깔때기 모양 아이콘을 클릭한다.

(이 글은 맥에서 작업했기 때문에 윈도우 환경의 파워포인트와 보여지는 화면이 살짝 다르다. 윈도우에서는 '필터'를 클릭하면 된다.)

 

노란색 동그라미로 표시한 'Creative Commons만'은 저작권에 문제가 없는 이미지들만을 보여준다는 의미이다.

 

위 처럼 필터(깔때기 아이콘)을 클릭해서 '유형'을 '투명'으로 바꿔주면 배경이 투명한, 스티커같은 이미지들만 가져온다.

 

 

그런데 이미지가 몇개 안 보일 것이다. 저작권에 문제없는 것이 확실한 이미지만 보여주고 있기 때문이다.

 

더 많은 이미지를 보고 싶다면 아래 노란색 동그라미로 표시한 '크리에이티브 커먼즈만 보여주기'옵션을 체크해제하면 된다.

저작권 상관없이 모든 이미지를 보겠다는 뜻이다.

 

곧바로 아래처럼 훨~씬 더 많은 이미지들이 나타나는 것을 볼 수 있다.

 

바람직한지는 모르겠으니 개인적인 용도로 쓸 때만 이렇게 하길 바란다.

 

 


 

 

다시 작업하던 페이지로 돌아가서,

페이지를 완성했다면 이제 아래처럼 크기를 적당히 줄이고 출력하면 된다.

 

 

파워포인트 창에서 이렇게 글자 아래에 빨간줄이 가는 것은 맞춤법을 확인하라는 표시이다.

출력할 때는 나타나지 않으므로 신경쓰지 않아도 된다.

 

 

 

다 끝났다. 이제 마음에 드는 종이를 골라 출력하자.

아래처럼 예쁜 표지가 되어 사용할 수 있다.

 

끝~

벡터와 벡터끼리 연산을 할 수가 있다.

아래처럼.

a = c(1, 2, 3)
b = c(1, 2, 3)
c = a + b
c

[1] 2 4 6

 

그러면 반드시 위처럼 1:1로 대응이 될 때만 연산이 가능할까?

아니다.

길이가 서로 다른 벡터끼리도 연산시킬 수 있다.

이 때는 짧은 쪽의 벡터가 반복되어 긴 쪽의 벡터에 연산된다.

이를 사이클링 기법이라고 한다.

 

이 때, 두 벡터의 길이는 서로 배수관계여야 한다.

무슨 말인가 하면, 아래처럼 한쪽 벡터의 길이가 4라면, 다른쪽 벡터 길이는 2로, 서로 배수여야 한다.

한쪽 벡터의 길이가 6이라면, 다른쪽은 3. 한쪽 벡터의 길이가 8이라면 다른 쪽 벡터의 길이는 최소 2 혹은 4여야 한다.

a = c(1, 2, 3, 4)
b = c(1, 2)
c = a + b
c

[1] 2 4 4 6

위처럼 딱 맞는 배수길이이면, 짧은 쪽인 b를 a에다 반복해서 더해준다.

고로 1, 2, 3, 4 -> 2, 4, 4, 6 이 된다.

 

 

만약 아래처럼 한쪽은 길이가 4인데 한쪽은 길이가 3이라면 배수 관계가 아니다.

a = c(1, 2, 3, 4)
b = c(1, 2, 3)
c = a + b
c

위처럼 서로 배수관계가 아닌데 연산을 하면 어떻게 되는가?

 

싱겁지만 문제 없이 연산이 되긴 된다. 아래처럼 경고 메시지가 뜰 뿐.

경고 메시지는 그냥 무시하면 되므로 크게 문제 될 것이 없다. 짧은쪽이 긴쪽의 벡터에 돌아가며 적용되는 것은 똑같다. 중간에 끊길 뿐.

 

   1, 2, 3, 4     <- a(1, 2, 3, 4)

+ 1, 2, 3         <- b(1, 2, 3)

위처럼 시키면

 

   1, 2, 3, 4     <- a(1, 2, 3, 4)

+ 1, 2, 3, 1     <- b(1, 2, 3)

이렇게 된다는 얘기.

'데이터 분석' 카테고리의 다른 글

R 벡터에 이름 지어주기  (0) 2022.06.12

이 글은 맥북(M1)을 기반으로 작성되었습니다.

 

수업중에 Pyqt5(파이큐티5)가 설치가 되지 않았다.

원인은 파이썬 버전때문이었다. Pyqt5를 설치하기 위해 파이썬 버전을 3.8로 낮추어야 한다.

 

파이참에서 파이썬 버전 낮추기

1. 인터프리터 셋팅에서 현재 사용중인 높은 버전의 파이썬을 먼저 삭제한다.

 

2. 그리고 파이참을 종료한다.

 

3. 공홈에서 파이썬 3.8을 다운로드 하고 설치한다.

 

4. 파이참을 재실행한다.

 

그러면 pip등이 모두 날아가고 없을 것이다.

5. 아래의 명령어를 통해 pip를 재설치해주어야 한다.

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py

 

 

오늘은 너덜너덜해진 표지의 책을 새롭게 다시 태어나게 해보았다.

 

 

 

책을 사랑하고 수집하는 나로서는 아래 같은 책을 보며 한숨이 나온다.

 

 

 

아이의 책 상태는 항상 요 모양이다.

도대체 표지를 가지고 뭘 하는 걸까. 뜯어먹기라도 하는걸까.

 

두고 볼 수가 없어 수선해보기로 한다. 썩 잘하는 건 아니지만 아이덕분에 몇번 해봤더니 이제 자신이 있다.

 

 

 

먼저 문구점에서 사서 쟁여둔 두꺼운 펠트지를 꺼냈다. 열장이 들어있고 천원인가 2천원인가 했던 것 같다.

 

인쇄를 할 것이므로 연한색상을 선택했다.

 

종이는 가급적 두꺼운 것이 좋다. 이 종이는 180g이라 충분히 표지로서의 역할을 할 수 있다.

실제로 보면 따스한 색감의 개나리색이다. 아주 예쁜 색이다.

 

 

 

종이에 붙어있는 그람수는 종이가 얼마나 두꺼운 가를 알려준다고 보면 된다.

 

우리가 일반적으로 사용하는 a4 복사용지는 대부분 75g이다. 굉장히 얇고 팔랑거린다. 

 

 

나는 아이들에게 나누어줄 때 주로 100g을 선호한다. 이쯤되면 고급스럽고 종이가 탄탄하다.

'페이퍼원'사의 제품을 자주 구매하는데 품질이 정말 좋다.

 

 

거기서 돈을 좀 더 쓰면 120g이 되는데 아주 탄탄하고 손에 닿자마자 고급스러움이 느껴진다.

가끔 출력물을 나눠줄 때 사람들이 이거 무슨 종이예요? 물어볼 정도. 

 

120g 역시 페이퍼원 제품을 굉장히 만족하며 사용했는데 단종된 것인지 지금은 도저히 찾을 수가 없다. ㅠㅠ

 

 

 

어쨌든, 준비한 종이에 파워포인트로 그럴듯하게 표지를 인쇄한다.

제목 넣고 적당한 그림을 선택해서 넣는데는 5분이면 충분하다.

 

 

 

파워포인트로 표지 만드는 방법은 따로 포스팅하였다.

 

https://bookmill.tistory.com/entry/%ED%8C%8C%EC%9B%8C%ED%8F%AC%EC%9D%B8%ED%8A%B8%EB%A1%9C-%EC%B1%85-%ED%91%9C%EC%A7%80-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%98%A8%EB%9D%BC%EC%9D%B8-%EA%B7%B8%EB%A6%BC-%EC%82%BD%EC%9E%85-%EA%BF%80%ED%8C%81

 

파워포인트로 책 표지 간단하게 만들기 & 온라인 그림 삽입 꿀팁

정말정말 간단하고 별거 없는, 파워포인트로 책 표지 만드는 방법~ 먼저 파워포인트를 열고 '새 프레젠테이션'을 하나 만든다. 그리고 메뉴에서 '디자인' 탭으로 간다. '디자인' 탭을 클릭 후 나

bookmill.tistory.com

 

 

 

 

 

예쁘게 잘 출력되었다.

 

몇달전에 산 캐논 무한 잉크 프린터를 정말 잘 쓰고 있다. 무한잉크다 보니 부담없이 팍팍 뽑는다.

 

 

 

출력한 종이를 책 위에 대어서 크기에 맞게 잘라내고, 곧바로 책싸개 필름으로 커버링을 했다.

 

그러나 영... 마음에 들지 않는다. 

 

 

 

 

왜냐하면 내부가 이 꼴이었기 때문이다.

 

저부분이 안보이도록 다른 종이를 덧대자니 번거롭고, 또 여러겹의 종이가 겹쳐지며 우글거릴 게 뻔했다.

 

 

 

그래서 과감하게 표지를 그냥 잘라내어버렸다.

 

아예 다시 만들어 붙이기로 한다.

 

 

 

다시 출력해서 크기에 맞게 잘 잘라내고 스카치테이프로 책에 연결했다.

그리고 전체적으로 다시 필름으로 커버링~

 

 

아차. 과정샷이 하나도 없다. 블로그 하면서 과정샷을 안남기다니. ㅋㅋ 이래서 초보는 초보다.

 

 

덩그러니 결과물만 있는 작업~ 

뭐 어쨌든 대충 일케 저케 한거 아시겠죠? ㅋㅋ

 

표지는 전부 책과 스카치테이프로만 연결했으나 꽤 탄탄하다. 어차피 전체적으로 필름으로 감싸주기 때문에 내구도는 문제없다.

 

 

 

 

책커버 필름은 아래 링크에서 구입했다.

 

https://www.coupang.com/vp/products/3496697?itemId=3304805787&vendorItemId=71291716163&src=8139401&spec=10999999&addtag=400&ctag=3496697&lptag=CFM27209560&itime=20220607054013&pageType=PRODUCT&pageValue=3496697&wPcid=16545480130026015745196&wRef=&wTime=20220607054013&redirect=landing&isAddedCart= 

 

미소로 잘라쓰는 북커버 1283

COUPANG

www.coupang.com

 

 

원래 쓰던 제품이 없어져서 사본 제품인데 장단점이 뚜렷하다.

 

단점

북커버 필름중에서는 많이 얇은 편이라 붙이기가 어렵다.

북커버 필름이 붙이기 어렵다는 건 사실 치명적인 단점이다! 잘못 붙이다가 책도 사망....하는 수가 있기 때문...

반드시 한번에 잘 붙여야 한다.

그게 얼마나 큰 부담인지;;

 

또, 아주 천천히 스크래퍼로 밀면서 세심하게 붙이지 않으면 표면에 기포가 120개쯤 생기는 걸 보며 환공포증을 느낄 수 있다.

 

그래서 처음 샀을 때는 후회했었다. 

 

장점

지문이 잘 안묻는다.

 

그리고 바깥면이 엠보싱 처리가 되어 있어서 스크래치나 흠집이 나도 깨끗해보인다.

그래서 1년을 아이가 험하게 사용하고도 책 상태가 항상 괜찮아보이는 효과가 있다.

 

부착이 어려워서 처음엔 많이 실패했지만 아이 교과서를 감싸느라 십여번 해보니 이젠 순식간에 후루룩 해낸다. 

 

그래서 내 책 중에서도 아끼고 자주 읽는 책은 이 필름으로 감싸준다.

책 보호 효과가 아주 좋다.

향후로도 재구매할 예정이다. 이젠 요령이 생겨서 거의 실패하지 않는다.

대충 한 날은 여지없이 기포가 생기는데, 좀 귀찮지만 일일히 칼로 살짝 째고 공기를 빼주면 티가 안난다.

 

 

 

역시 쥐파먹은 듯 찢어져 있던 '들어가는 말' 페이지도 곱게 오려서 다시 붙여주었다.

유대인들의 토론식 교육과 강의식 암기식 교육에 대한 비교 글이 들어가 있어 꼭 남겨놓고 싶었다.

 

이번에도 양면테잎과 스카치테잎만으로 금방 끝.

 

 

매우 튼튼하게 재탄생했다. 뿌듯하다.

 

 

뚝딱뚝딱하느라 1시간이 흘러갔지만 뿌듯~하다.

아이가 제발 책을 좀 아꼈으면. 

 

한밤중에 종이 오리고 붙이고 있는 이 엄마의 사랑을 알까?

자체제작 문제
학생들을 가르치며 학생들에게 쉬운 알고리즘을 학습시키기 위해 만든 문제입니다. 마음껏 퍼가셔도 좋습니다. 상업적 사용은 금지합니다.

 

누가 제일 강한 히어로지?
list안 요소들의 자리를 서로 바꿔주는 함수

 

댕댕이는 어벤저스 시리즈를 본 후, 히어로들이 토르 -> 아이언맨 -> 캡틴 아메리카의 순서대로 강하다고 생각했다.

토르는 신이므로 인간이 도저히 이길 수 없고,

 

 

아이언맨은 기술로 무장했으므로 이 역시 인간의 능력 이상이며

 

 

마지막으로 캡아가 인간 중에서의 최대치라고 생각한 것이다.

 

 

하지만 같이 영화를 본 고영이의 생각은 달랐다.

 

캡아는 이 중에서 가장 약체인 순수 인간이면서(기계가 없는) 가장 올곧고 선한 의지를 가졌기 때문에 이 중에서 가장 강한 존재라고 말했다.

 

 

그 다음 아이언맨은 기술의 도움을 받지만 그래도 인간을 초월했다고 볼 수 있어 두번째로 강하며,

 

 

토르는 신이긴 하지만 망치 없이는 무쓸모(?)인데다 아이언맨처럼 스스로 개발한 것이 아니라 출신때문에 그냥 부여받은 것이라서 이 중에서는 가장 약한 존재로 봐야 한다고 했다. 

 

 

그래서 고영이는 캡아 -> 아이언맨 -> 토르의 순으로 강하다고 생각했다.

 

댕댕이는 고영이의 논리에 설득당해 생각을 바꾸게 되었다.

이를 코드로 표현해보자.

 

 

 

댕댕이의 최초 생각을 강한 순서대로 배열해보자.

 

heroes = ['토르', '아이언맨', '캡틴아메리카'] 

 

토론 후의 댕댕이의 리스트는 아래와 같이 바뀌었다.

 

heroes = ['캡틴아메리카', '아이언맨', '토르']

 

위의 변화를 살펴보면 list의 [0]번째 값과 [2]번째 자리가 값이 서로 바뀌었다.

이렇게 list의 어떤 요소 두개의 자리를 서로 바꿔치기 해주는 함수를 만들어보겠다.

 

문제 풀기

이 함수의 이름은 바꿔치기를 의미하는 'swap'으로 하겠다.
이 함수가 하는 일은 list의 [0]번째 값과 [2]번째 값의 자리를 서로 바꾸어주는 것이다.
heroes = ['토르', '아이언맨', '캡아'] 라는 리스트가 있다고 할 때,
swap이라는 함수에 heroes를 넣고 돌린 결과가 아래와 같이 반환되도록 하면 성공이다.
그리고 heroes에는 바뀐 값이 다시 담기도록 하자.
이 함수를 돌리면 heroes의 값은 아래와 같이 된다.

[‘캡아’, ‘아이언맨’, ‘토르’]

 

heroes = ['토르', '아이언맨', '캡아']

def swap(list):
	temp = list[0]
	list[0] = list[2]
	list[2] = temp
	return list


heroes = swap(heroes)

 

 


응용

사람의 생각이란 유연하다. 시간이 지나면 또 바뀔 수도 있는 법이다.

 

또 다른 친구 보노보노는 아이언맨의 수트보다 토르의 묠니르가 더 우월한 문명의 초물질적(?) 기술이라고 말했다.

아이언맨의 수트는 토르의 묠니르보다 뒤쳐진 문명이라는 것이다.

그래서 이번에는 아이언맨을 3위로 하고 토르를 2위로 정했다.

이렇게 생각은 계속 바뀔 수 있으므로 이제부터는 바꿀 자리를 입력받기로 한다.

 

swap() 함수에 바꿀 값들의 자리까지 지정할 수 있도록 하자.

바꿀 값들의 위치를 매개변수 idx1, idx2 로 받기로 한다.

heroes = ['캡아', '아이언맨', '토르']

def swap(list, idx1, idx2):			# n1, n2는 list내의 인덱스 번호
	# 임시저장소 역할을 하는 temp에 idx1에 있는 값을 저장해둔다.
	temp = list[idx1]
	# idx1 위치에다 바꾸고자 하는 idx2 위치에 있는 값을 넣는다.
	list[idx1] = list[idx2]
	# idx2 위치에는 아까 임시저장소 temp에 기록해두었던 최초 idx1 위치에 있던 값을 가져온다.
	list[idx2] = temp
 	return list

# 인덱스 1번 값과 인덱스 2번 값의 자리를 서로 바꾼다.
heroes = swap(heroes, 1, 2)

이제 heroes에는 ['캡아', '토르', '아이언맨'] 이 담겨있을 것이다.

 

 

 

 

여러분은 과연 어떤 순서대로 강하다고 생각하는가?
heroes = ['배트맨', '슈퍼맨', '아이언맨', '완다']
이와 같은 데이터가 주어질 때, 위에서 만든 swap( )함수를 이용하여 여러분이 강하다고 생각하는 순서대로 영웅들을 배치해보라.

 

그저 그런 날, 기분이 좋은 날, 기분이 좋지 않은 날을 반복하다가 뜻밖의 좋은 일이 생기는 선물같은 날들이 있다.

퇴근하고 집에 오니 현관문 손잡이에 쇼핑백이 걸려있었다.

일에 지쳐 빨리 집에 들어가고 싶은 마음뿐이어서 얼른 쇼핑백을 들고 들어오느라 사진은 미처 찍지 못했다. ㅋ

 

예쁜 포장안에 들어있던 것은, 친한 언니로부터의 맛있는 홈메이드 반찬과 쪽지!

스승의 날이라 준비했단다.

반찬은 당연히 너무 맛있었다. ㅠㅠ 갓 해서 준 듯한 신선함과 엄마의 손맛이 느껴지는 재료 듬뿍 맛 듬뿍, 자극적이지 않고 달지 않고 짜지 않은 그런 맛! 정말 너무너무 맛있었다. 역시 요리도 재능이다. 나에게는 없는 재능. 최근에는 음식을 아예 하지 않고 있어서, 언니가 아니었으면 이런 맛을 볼 수 있었을까 싶다. 맛있다고 유명한 반찬가게에서 사와도 이런 맛은 볼 수가 없었다.

 

그런데, 스승의 날인데 언니가 나한테 왜...?? 하고 어리둥절 했는데 쪽지를 읽고 의미를 알고 감동받았다.

나를 스승 취급(?)해주신 언니께 매우 감사.💕 ^^*

문장도 글씨체도 어쩜 이렇게 멋지게 쓰시는지!

 

이렇게 가끔, 내가 누군가에게 도움이 되었다는 사실을 알았을 때 그보다 기쁠 수가 없다.

언니가 그 마음을 표현해주었기에 나도 덕분에 행복하고 감사함에 가득 잠길 수 있었다.

우리에게 표현은 얼마나 중요한가!

 

 

그리고 스승의 날 밤, 지난 겨울 해운대로 전학을 간 가르치던 학생에게서 톡이 왔다.

수업하는 동안은 필요한 말 외에는 딱히 대화도 많이 하지 않았지만 나는 평소 학생들에게 대화를 많이 거는 편이라 그 아이와 많은 얘기는 못나눠도 자주 짧은 대화를 하곤 했었다.

하나있는 남동생과 함께 수업을 들으며 항상 무심한 척 하면서 동생을 신경쓰고 챙기던 속 깊은 친구였다.

 

마지막 수업하는 날까지도 나에게는 아무 얘기 없이 떠났어서 나중에 학부모께 전학으로 이제 수업을 못 듣는다는 사실을 듣고 그동안 정들었었는데 인사도 못하고 헤어진 것이 섭섭하고 아쉬웠었다. 그런데 얼마후에, 그 친구가 깜짝 놀라게도 손편지로 메세지를 보내왔었다.

속이 깊었던 친구라, 앞에서는 말로 하지 못했던 자신의 마음을 글로 담아 보낸 것이었다. 전학가니까 이제 못온다는 말을 하기가 수업시간에 얼굴을 보고 말하기 어려웠었나 보다. 그런 마음을 알고 나니 뭉클함이 밀려왔었다.

 

그 후로 정말 아주 가끔, 뜬금없이 이 친구와 그 동생이 떠오르며 잘 지내는지 생각날 때가 있다.

정말 신기하게도 그런 날은 어김없이 이 친구로부터 톡이 온다.

 

학생에게 동의 받았습니다 ㅋ

중학생 답게 늦게까지 잠을 안자는지 이렇게 늦은 시간에 톡이 왔다. ㅋ

한창 공부하느라 책과 씨름하다가 톡을 확인하고 얼마나 감동받았던지💖 하루동안의 피로가 모두 한방에 가시는 기분이었다.

당장 답장을 했다. ㅇㅇ아. 너는 항상 선생님이 준 것보다 더 많은 것을 내게 돌려주는구나! 고마워. 네 덕분에 나도 더 좋은 선생님이 되기 위해 노력하게 된단다!

 

한편으로 내가 이 아이에게 이만큼 감사를 받을만한 일을 했던가 하는 생각이 들며 부끄러워진다. 그리고 나를 돌아보게 된다.

만나는 모든 이에게 친절하자. 그리고 아이들을 인격적으로 대하자.

 

나도 언제나 감사를 표현해야지. 그리고  도움이 되어야지. 

이렇게 감사함이 하늘의 햇살처럼 듬뿍 쏟아지던 날.

작년 겨울방학에 특강을 나갔던 한 중학교 수업. 당시 10차시밖에 안되는 수업인데 하고 나서 참 많은 생각이 들었던 경험이다.

먼저, 학교측에서 학부모들에게 교재비 걷는 것을 부담스러워하며 시중 교재를 복사해서 사용하길 원했다.(;;;;) 그건 안되겠다고 정중하게 거절했더니 그럼 프린트물을 만들어서 사용하라는 주문.

 

 

간단하게 요약정리나 하고 예제 조금 실으면 됐을지도 모르지만, 그렇게 하기는 싫었다. 또또 나의 열정이 막 불타올랐다.

 

그래서 까짓거 그럼 만들지 뭐! 하면서 교재를 만들게 됐다. 한달정도의 여유기간이 있었는데, 마지막 2주정도는 정말 밤을 새워 몰입해서 만들었다. 매일 하루 3~4시간정도 잤던 것 같다. 아마 시작한지3일째되는 날부터 후회하기 시작했던 것 같다.

 

 

 

 

 

 

 

그렇게 단기간에 만든 교재니 뭐 퀄리티가 얼마나 될까마는, 그래도 10차시안에 함수까지 갈 수 있도록 구성하면서 최대한 쉽고 이해가 잘 가도록  최선을 다했다. 

강의를 하면서도 교재를 완성해나갔기 때문에 그날그날 교재를 출력해 들고 갔다. 하루에 한사람에게 주는 양이 몇십장이어서 집에서 다 출력해가기가 아까웠다갈 수가 없었다. 그래서 한부만 집에서 출력해서 학교에 가서 복사해서 아이들에게 나누어주었다.

 

복사를 마치면 내 팔에는 약 100~200장가량 프린트물이 들려있곤 했는데 학교측에서는 내가 들고 있는 종이 양을 보고 깜짝 놀랐다. 아니 그럼 단 몇장이면 될 줄 알았냐고...

 

 

 

 

 

거금 2,000원을 털어 일일히 쫄대화일에 다 끼워줬지만 분실하는 아이들도 있었고 결석한 날의 프린트물은 없거나 했다. 또 나는 정성들여 컬러로 제작했건만 학교 복사기로 흑백복사해서 나누어주다보니 글씨도 잘 안보이고 내가 원하는 느낌이 전혀 아니었다. (컬러 복사 되냐고 묻고 싶었지만 내가 매일 A4를 100장 이상 써제끼는 걸 보고 놀라시는 교감선생님을 보고 참았다) 나는! 고퀄! 고퀄이 좋다고!

 

그래도 6명의 친구들을 데리고 1주일동안 정말 재미있게 수업했다.

그 중 몇명은 차출(?)되어 온터라 코딩이 뭔지 타자치는 방법도 모르는 친구들이었다. 그런데 점점 흥미를 가지며 자기는 이제 해커가 되겠다고 장난치기도 했다. 갈수록 눈을 반짝이며 수업을 듣는 모습을 보니 피로가 다 사라지는 것 같았다.

 

10차시 수업을 마치며 정신없이 몰아친 스케쥴안에서 아이들이 개념들을 다 이해했는지 걱정됐고, 기왕 의욕이 올라온 아이들을 위해 남은 과정은 혼자서라도 공부할 수 있도록 교재를 주고 싶었다.

혹시 교재를 제본해서 만들어주면 받고 싶은 사람이 있는가 물었더니 1명을 제외하고 모두 열정적으로(?) 받고 싶어했다. 그게 왜 그렇게 뿌듯했던지. 내가 만든 교재를 받고 싶어하는 사람이 83.3%나 되다니! 

 

마치 단체손님 예약 주문을 받는 느낌

 

 

 

 

소량 제본을 맡기려니 비용이 생각보다 많이 나왔다. 권당 2만원이었던가. 그래서 '이럴거면 차라리' 병이 도지고 말았다. 십만원주고 제본할거면 차라리, 제본기를 사서 직접 하자! 사두면 앞으로도 두고두고 쓸테고, 그럼 비용도 오히려 더 싸게 친다! ... 라고 스스로를 속이며 열심히 검색을 해서 제일 가격대비 품질좋은 열제본기 한대와 열제본 커버 한세트를 샀다. 

그리고 종이도 100g짜리 질 좋은 용지 한박스를 샀다. 기왕 만들어주는 거 튼튼하고 예쁘게 만들어주고 싶었다. 오래오래 보도록!

 

어머. 그런데 5년간 잘 쓰던 프린터가 오랜만에 쓰려고 보니 고장났네? ... 프린터도 새로 샀다. ...

 

 

 

 

그때 애들에게 주려고 제본한 교재

 

 

 

총 400여장을 출력하는데는 6시간 걸렸다. 약속한 날까지 가져다주기 위해 밤을 꼬박새워 프린트하고 제본까지 마쳐서 학교로 가져다 드렸다. 책을 받길 원했던 아이들 목록과 함께.

 

그러고 돌아오는 발걸음이 그렇게 가벼울 수가 없었다. 맞다. 실로 그때 나는 가벼웠다.

왜냐하면 내 지갑이 텅 비어버렸기 때문이다. 약 2주를 밤새 준비하고 1주일간 열심히 강의하고 남은 것은 제본기 한대와 프린터 한대였다.

 

 

 

그렇게 되었다.

 

 

 

그래도 뭐 나름 괜찮다고 스스로를 다독였다. 맨 처음에 강의 계약을 할 때 1년 계약기간으로, 첫 수업에서 학생들로부터 만족도가 잘 나오면 그 뒤 남은 기간동안 수업을 하는 조건이었기 때문이었다.

 

 

 

 

 

언제쯤 연락이 올까. 매일매일 설레었다. 만족도 조사결과가 나왔는지 궁금해서 담당 교사께 톡으로 여쭤보기도 했다. 수업을 지속하고 못하고보다 아이들이 얼마나 내 수업에 만족했는지, 내가 수업을 재미있게 했는지 충분히 잘 전달했는지가 너무 궁금했다. 

그런데 담당하신 분께서는 답변은 주신다고 해놓고도 없었고, 몇차례 문의하니 본인은 새학기에 다른 학교로 가신다며 인수인계를 잘 해놓을테니 걱정마시라 하셨음에도 결국 아무런 인수인계를 하지 않고 가셨다 한다.

 

 

뭐라구요?

 

 

 

학교측에서는 나와 면접보고 계약서를 작성할 때 했던 약속들은 모두 깡그리 잊은 듯 새롭게 강사를 뽑는 공고를 냈고, 나는 1년 계약서를 써놓고도 다시 응시해서 면접도 다시 보고 다시 계약서를 또 쓰는 이상한 상황이 되어버렸다.

아이들이 좋아하겠다며 잘 나눠주겠다고 하시던 내 교재들은 한권도 밖으로 나가지 못한채 캐비닛에 쳐박혀있었고, 일을 이어받은 새로오신 선생님이 그걸 발견하셨다고 한다.

 

 

 

부들부들...

 

 

이 과정들에서 나는 상처를 받았다. 학교가 나에게 했던 약속은 물론 계약서에 적혀있던 사항조차 제대로 지켜지지 않았고, 무엇보다 아이들과 철썩같이 약속했던 교재들이었는데 단 한사람의 손에도 가지 못한 것이 속이 상했다. 후에 다시 만난 아이들에게 물어보니 교재를 가져가라는 연락을 전혀 듣지 못했다고 한다.

 

그리고 강사인 내가 하면 심각한 잘못이 될 일들이 학교측에서는 아무 미안함도 없이, 문제 될 것도 없이 그냥 지나가는 것이 부당하다고 느꼈다. 분명히 첫 계약서에 쓰여있던 계약기간조차 무시하고 새롭게 계약을 맺을 수 있다는 게 아이러니했다. 계약서 내용을 강사는 무슨 일이 있어도 지켜야 하는데 말이다. 

 

 

 

 

 

 

이 일은 나의 열정에 분명히 영향을 주었다. 물론 아직도 나는 새로운 일에 불꽃이 튀거나 하면 또 완전히 몰입하고 만들어내는 걸 즐긴다.

하지만 다시는 학교라는 장소에서 그만큼 열의를 쏟고 싶지 않은 것이 솔직한 마음이다.

 

어쨌든 그때의 경험은 좋은 자산이 되긴 하였다.덕분에 제본기도 생기고(눈물) 프린터도 새로 사고(눈물x2) 짧은 시간에 교재를 만들어내는 요령도 익혔으니 말이다.

지금은 결국 그 학교에서 다시 일을 하고 있긴 하지만, 또다시 교재라던지 하는 부분에서 내가 받아들이고 싶지 않은 요구를 받는다면 언제라도 그만두려고 한다. 

 

 

네.

 

 

 

비단 이 곳 뿐만이 아니라 일을 하면 할수록... 여러가지로 학교에서 일을 하는 것이 나에겐 참 안맞다는 생각을 자주 한다.

빠르게 변하는 시장에서 새롭고 좋은 교재들이 하루가 멀다하고 쏟아지는데 미리 정해둔 교재가 아니면 쓸 수 없다거나, 강사에게는 새로운 것 혁신적인 것을 원하면서 새로운 프로그램을 시도하려고 하면 난색을 표한다거나 ... 지원없이 알아서 하길 바란다거나...

딱딱 정해진대로 맞춰진대로 하지 않으면 곤란한 것도...

 

 

 

 

 

여러모로 나에게는 참 갑갑하게 느껴진다. 나는 자유롭게, 이것저것 시도해보면서 아이들에게 충분히 배움을 만끽하고 머물수 있게 해주고 싶은데, 학교의 요구에 맞추려다 보면 그럴 수가 없다.

이렇게 학교랑 안 맞는 내가 어쩌다가 또 학교로 흘러들어와서 일을 하고 있을까. 이래저래 생각이 많아진다.

def facto(num):
	result = 1
	for i in range(num, 0, -1):
		result = result * i
	return result

팩토리얼이란 무엇일까?

팩토리얼은 1부터 어떤 숫자까지의 모든 숫자의 곱을 뜻한다.

표기는 숫자 + ! 로 표시한다.

 

표기법

2!  ->  1 x 2 = 2
3!  ->  1 x 2 x 3 = 6
4!  ->  1 x 2 x 3 x 4 = 24
5!  ->  1 x 2 x 3 x 4 x 5 = 120

위와 같이 된다.

읽을 때는 2팩토리얼, 3팩토리얼, 4팩토리얼... 이라고 읽는다.

 

 

주의점

팩토리얼에서 주의할 점이 몇 가지가 있는데,

첫째. 팩토리얼은 무조건 양의 정수만 취급한다.
둘째. 0! (0 팩토리얼)은 1이다.
셋째. 1! (1 팩토리얼)도 1이다.

위 세 가지만 명심하면 된다.

 

처음 배울 때 두번째 세번째 조항이 나는 상당히 거슬렸다.

아니 수학인데, 이렇게 예외를 두는게 어디있어?

2!는 1 x 2이고 3!은 1 x 2 x 3이니까 1!은  그냥 1인건 이해하지만,

0!은 0이어야지 왜 1인데! 이게 말이 돼?

 

... 라고 수학에 대해 1도 모르는 나는 생각했다.

 

도저히 이해가 안가던 나는 0!이 0이 되면 0 x 1 x 2 x 3 ... 를 했을 때 무조건 값이 0이 되어버리는 오류를 막기 위해서 그냥 0!은 1이다 라고 학자들이 임의로 정해놓은 거다 라고 생각했다.

 

허나... 그건 수학알못인 나의 추측일 뿐, 공식 자체에 근거가 있었다. 어쩐지. 수학이 그렇게 쉬울리가 없지. 아래 링크를 따라 가 보면 어째서 0!이 0이 아닌 1이 되는지 잘 설명되어 있다. (다만 내가 이해를 못했을 뿐)

https://samulgoongi.com/4535

 

0!은 왜 1일까? - 사물궁이 잡학지식

팩토리얼(factorial)은 자연수(=양의 정수)의 계승이라고도 합니다. 기호는 느낌표(!)를 사용하고, n이 양의 정수일 때 1부터 n까지의 곱을 n!이라고 합니다. 예를 들어서 3!(=6)은 1×2×3이고, 4!(=24)은 1

samulgoongi.com

 

 

0팩토리얼이 왜 1인가를 이해하지 못했다 하더라도 알고리즘을 짜는데는 전혀 상관이 없다.

그러니 바로 알고리즘을 작성해보겠다.


시작

def facto(num):

일단 함수 이름을 facto, 팩토라고 정의하겠다.

 

어차피 팩토리얼은 무조건 1부터 시작하기 때문에 마지막 값만 받으면 된다.

고로 매개변수는 하나만 준비한다.

num 이라고 이름 지어주었다.

 

이번에는 for 대신 while을 쓰겠다. 둘 중 무엇을 써도 상관없다.

다만 팩토리얼의 특성상 while이 더 어울린다고 생각해서 나는 while을 쓰는 것 뿐이다. (이는 사람마다 다를 것)

 

5!을 풀어쓰면 1 x 2 x 3 x 4 x 5 이지만, 5 x 4 x 3 x 2 x 1 로도 쓸 수 있다.

 

굳이 이렇게 순서를 거꾸로 쓰는 것은 재귀함수를 설명할 때 이해하기 편해서인데, 이 부분은 나중에 이야기하겠다. 지금은 그냥 아 거꾸로 해도 상관없지~ 라는 마음으로 임하자.

def facto(num):
  while num > 0:

위 코드는 num이 0보다 큰 동안 계속 반복한다. 즉 num이 0이 되는 순간 반복이 끝난다.

 

def facto(num):
	result = num
	while num > 0:

아뿔싸, 계산을 시작하려고 보니 결과값을 담을 곳이 없다.

while문 밖에서 result 변수를 선언하고 num을 담아준다. 계산을 num부터 시작할 것이기 때문이다.

5팩토리얼이라면 5 x 4 x 3 x 2 x 1 이 되도록.

 

def facto(num):
	result = 1
	while num > 0:
		num = num - 1  # 계산1
		result = result * num  # 계산2

그리고 이제 num은 1씩 깎아준다. 그리고 result에 1 깎인 num, 여기서는 4를 곱해준다.

현재 result = 5 * 4 가 된다.

 

이것을 계속해서 num이 1이 되었을 때는

result = 5 * 4 * 3 * 2 * 1 * 0 이 되게 된다.

num이 1일 때 0을 곱하기 때문에, 결과값이 0으로 도로아미타불이 되는 문제가 생긴다.

 

해결하는 방법은 여러가지가 있겠으나,

num이 0이 되는 순간, 곱하기 전에 그냥 반복문을 탈출하기로 하자.

그래서 아래처럼 탈출구문을 사이에 끼워준다.

def facto(num):
	result = num
	while num > 0:
		num = num - 1  # 계산1  

		# 바로 여기 <num이 0이면 곱셈하기 전에 탈출하라>
		if num == 0:
			break
    
		result = result * num  # 계산2

 

마지막으로 계산이 끝난 result를 반환해주면 되겠다.

def facto(num):
	result = num
	while num > 0:
		num = num - 1  # 계산1  

		# 바로 여기 <num이 0이면 탈출하라>
		if num == 0:
			break
    
		result = result * num  # 계산2
    
	return result

 

실행해보자.

실행결과
print(facto(5))
120

print(facto(6))
720

잘 작동한다.

 


for문으로 짜기

이번에는 for문을 활용해서 짜보자.

result는 보통 초기화 할 때 0을 주지만, 이렇게 곱셈을 해야 할 때는 1을 주어야 한다.

그래야 전체 결과가 0이 되지 않는다.

# result 초기값을 1로 준 경우
def facto(num):
	result = 1
	for i in range(num, 0, -1):
		result = result * i
	return result

 

 

result를 1로 주는 게 약간 변칙?처럼 느껴져 뭔가 찜찜하다면 아래처럼 짤 수도 있다.

result에 num값을 주고 시작하는 것이다.

그러면 for문의 범위가 조금 지저분해지긴 한다.

이래나 저래나 오작동 없이 값만 잘 나오면 된다. (쑻)

 

 

# result 초기값을 num으로 준 경우
def facto(num):
	result = num
	for i in range(num - 1, 0, -1):
		result = result * i
	return result

위 두 코드는 그냥 맥락의 차이일 뿐 결과는 동일하다.

 

num부터 시작해서 0까지 1씩 차감하며 내려가는데, range()의 특성상 마지막값 0은 포함하지 않으므로 자연스레 1에서 반복이 끝나게 된다.

따라서 5 x 4 x 3 x 2 x 1 이 된다.

 

이렇게 저렇게 다양한 방법으로 짜보았다. 본인이 마음에 드는 스타일로 짜면 되겠다.

VS CODE에서 파이썬 코딩을 편하게 하려면 확장팩을 설치해야 한다.

VS 코드에서 파이썬 확장팩 설치

그래도 뭔가 약간의 껄끄러움이 조금 있는데, 작성한 코드를 실행할 때 아래처럼 뭔가 좀 깔끔하지 못하다.

VS 코드로 파이썬 코드 실행하면 나오는 결과

Shell에서 매번 파이썬을 띄워서 코드를 실행시키는 모양이다.

결과창도 그닥 보기 좋지가 않고 매번 파이썬을 띄운다는 게 어쩐지 번거롭게 느껴진다. 그래서 파이참이 좀 더 나은 듯 하다.

 

 

파이참 실행화면

맥 기준으로 컨트롤 R을 누르면 바로바로 실행이 되고 결과창도 한결 깔끔하다.

이래서 역시 전용 툴을 써야 하나보다.

파이썬은 파이참으로...

 

파이참 설치 링크는 아래와 같다.

https://www.jetbrains.com/pycharm/download/#section=mac (맥 사용자)

https://www.jetbrains.com/pycharm/download/#section=windows (윈도우 사용자)

※ 이 글은 비제이퍼블릭 출판사의 '말랑말랑 알고리즘'을 기반으로 하여 작성하였습니다.

이 페이지는 

문제 -> 생각하기 -> 코드짜기 -> 테스트 -> 바른 결과

 

이렇게 다섯 단계로 구성되어 있습니다. ^^

 

1) 문제

▣ 아래의 list에서 각각의 숫자가 몇개씩 들어있는지 구하는 알고리즘을 작성하시오.

list = [4, 0, 4, 4, 1, 8, 8, 2, 2, 5, 0, 6, 5, 6, 0]

 

 

: list 안에 4는 몇개가 들어있는지, 1은 몇개가 들어있는지 등을 확인하는 코드를 작성한다.

이 알고리즘을 활용하면 전체 데이터에서 특정 데이터가 몇개인지 확인이 가능하다.

 

먼저 주어지는 데이터 list를 살펴보면 아래와 같은 특징이 있다는 것을 알 수 있다.

list = [4, 0, 4, 4, 1, 8, 8, 2, 2, 5, 0, 6, 5, 6, 0]

특징 : 데이터의 숫자들은 0부터 9까지만 존재한다.

 

그리고 결과는 대충 이런 식으로 출력하기로 한다.

0 : 3 개
1 : 1 개
2 : 2 개
3 : 0 개
4 : 3 개
5 : 2 개
6 : 2 개
7 : 0 개
8 : 2 개
9 : 0 개

0은 몇개이고 1은 몇개이고 이런식으로 출력하면 된다.

 

자 이제, 문제를 해결하기 위해 단계를 잘게 쪼개어 생각해보자.

 

 


2) 생각하기

포인트 1.

먼저 list의 첫 요소부터 마지막 요소까지 한바퀴 돌아야 한다.

 

 

포인트 2.

위처럼 한바퀴 돌면서 해당 값의 개수를 누적시켜 '메모장'에 적어두어야 한다. 

 

 

 

위 두가지 포인트를 기억하고 이제 코드 작성으로 들어가보자.

우리가 만들 것은 여러개의 데이터를 던져주면 그 안에 어떤 숫자가 몇개가 들어있는지 알려주는 자동화기계이다.

 

 

! 주의 : count() 명령어는 사용하지 않기로 한다. 왜냐하면 사실 이 짓을 하는 이유는 count()와 같은 기능을 직접 구현해보는 데 목적이 있기 때문이다. 파이썬 선배님들(?)이 미리 만들어놓은 count()명령어가 하는 일을 어떤식으로 구현해 낼 수 있을지 아이디어를 내고 검증하는 데 목적이 있다. 

 


3) 코드짜기

1. 틀 만들기

이제부터 만들 자동화기계의 이름은 how_many라고 하겠다.

먼저, how_many라는 함수를 선언한다. 

그리고 사용자가 던져주는 데이터를 받아담을 빈 서랍(변수)가 필요하다.

변수 이름은 아무것이나 상관없지만 나는 data라고 지어주었다. 이 서랍은 위에서 나온 list가 들어갈 공간이다. 

def how_many(data):

 

2. 메모장 준비

일단 데이터로 주어질 list에는 0부터 9까지의 숫자만 존재하는 것을 우리는 미리 알고 있다.

그러니 메모장에 미리 0부터 9까지의 칸을 만들어둔다.

이 칸은 각각 인덱스 넘버로 구분한다. 0번째 인덱스 자리에는 숫자 0의 개수를, 1번째 인덱스 자리에는 숫자 1의 개수를 적는 식이다.

칸을 만들때 파이썬 규칙에 따라 그 칸들을 비워둘 수 없으니 초기값 0으로 채워준다.

def how_many(data):
    memo = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]   # 이 부분

이렇게 0을 10개나 일일히 찍는 것은 실수가 있을 수도 있고, 비효율적이다. 혹시 데이터가 커져서 더 많은 칸을 만들어야 할 때는 매우 귀찮아진다. 0을 100개씩 찍어야 한다거나 1,000개씩 찍어야 한다면... 오 마이갓.

그래서 아래처럼 리스트 안에서 for문을 사용하여 자동화 하자. 

def how_many(arr):
    memo = [0 for i in range(10)]   # 이 부분

이렇게 해두면 range()안의 숫자만 수정하여 0을 100개도 1,000개도 만들 수 있다.

이제 아래와 같은 10칸짜리 메모장이 준비가 되었다.

현재 memo 변수에는 위와 같은 list가 담겨있다.

 

 

3. 데이터 한바퀴 돌기

입력받은 데이터를 처음부터 끝까지 훑어야 하니 아래처럼 data를 범위로 하는 for문을 작성한다.

def how_many(data):
    memo = [0 for i in range(10)]

    for i in data:   # 이 부분

 

 

이렇게 처음부터 마지막까지 한개씩 살펴봐야 한다.

 

4. 개수 세기

첫번째 데이터부터, 메모장의 해당칸에 개수가 누적되도록 한다.

첫번째 데이터가 '4'이니까, 메모장의 4번째 칸에 +1이라고 개수를 up 해주는 것이다.

def how_many(data):
    memo = [0 for i in range(10)]

    for i in data:
        memo[i]+= 1   # 이 부분

위 코드를 모두 돌고 나면, memo장에는 data내 모든 숫자의 count된 개수가 기록되어 있다.

아래 그림을 참고하여 이해해보자.

 

 

 

5. 결과 출력하기

개수 세기가 끝나고 나면 memo 변수 안에 결과물이 아래처럼 예쁘게 담겨있을 것이다.

이제 이 결과를 보기 좋게 출력해준다.

 

memo에는 0번째 인덱스에 0의 개수가, 1번째 인덱스에 1의 개수, 2번째 인덱스에 2의 개수... 이런식으로 숫자들이 담겨 있다.

memo역시 처음부터 끝까지 한바퀴 돌아야 하니 for문을 작성한다. 

그리고 memo의 첫요소부터 마지막 요소까지 출력하도록 한다.

def how_many(data):
    memo = [0 for i in range(10)]

    for i in data:
        memo[i]+= 1

    for ii in range(len(memo)):   # 이 부분
        print(ii, '->', memo[ii])   # 이 부분

주의할 것은 for문에서 memo를 범위로 줄 때 range(len(memo )) 이런 형태로 감싸주어야 한다는 점이다.

왜 이렇게 써야 할까? 그냥 for ii in memo 라고 작성하면 안되는 걸까?

for ii in memo 라고 작성할 경우 for문이 참조하는 범위가 memo의 값 [3, 1, 2, 0, 3, 2, 2, 0, 2, 0]이 된다.

결과를 출력할 때 memo[0], memo[1], memo[2] ... memo[9] 이렇게 인덱스 넘버 순서대로 돌아야 차례대로 몇개인지 기록해놓은 값인 3, 1, 2, 0... 을 가져올 수 있. But, 만약 memo자체를 범위로 주면 값인 [3, 1, 2, 0, 3, 2, 2, 0, 2, 0]이 범위가 되고, 따라서

memo[3], memo[1], memo[2], memo[0]... 이렇게 가져오는 순서가 뒤죽박죽 엉망이 되고 만다.

※ for ii in memo 의 결과. 아래처럼 의도와 다른 결과가 나오게 된다.
 
3 -> 0
1 -> 1
2 -> 2
0 -> 3
3 -> 0
2 -> 2
2 -> 2
0 -> 3
2 -> 2
0 -> 3

그러므로 for ii in range(len(memo ))형태가 되어야 한다.

 

len(memo ) => 10

range(len(memo )) => 0, 10

 

for문은 0부터 10미만까지 반복하게 된다. 따라서 0, 1, 2... 8, 9까지 반복하게 되고, memo[0], memo[1], memo[2] ... 순으로 올바르게 값을 가져오게 된다.

 

 


4) 테스트

 

코드 작성이 끝났다면, 이제 코드를 실행시켜보자.

def how_many(arr):
    memo = [0 for i in range(10)]

    for i in arr:
        memo[i]+= 1

    for ii in range(len(memo)):
        print(ii, '->', memo[ii])


list = [4, 0, 4, 4, 1, 8, 8, 2, 2, 5, 0, 6, 5, 6, 0]	# 데이터

how_many(list)	# 함수 실행

 

 


5) 바른 결과

0 -> 3
1 -> 1
2 -> 2
3 -> 0
4 -> 3
5 -> 2
6 -> 2
7 -> 0
8 -> 2
9 -> 0

 

알아보기 좋도록 출력부분만 코드를 약간 수정해보자.

def how_many(arr):
    memo = [0 for i in range(10)]

    for i in arr:
        memo[i]+= 1

    for c in range(len(memo)):
        print('숫자', c, '->', memo[c], '개')
숫자 0 -> 3 개
숫자 1 -> 1 개
숫자 2 -> 2 개
숫자 3 -> 0 개
숫자 4 -> 3 개
숫자 5 -> 2 개
숫자 6 -> 2 개
숫자 7 -> 0 개
숫자 8 -> 2 개
숫자 9 -> 0 개

 

이 글이 알고리즘 이해에 작게나마 도움이 되었다면 아래 하트를 눌러 공감 부탁드립니다~^^*

내 영어는 15년째 표류중이다.

15년전, 호주에 잠깐 어학연수를 다녀왔다. 그때 다녔던 어학원에서는 영어 실력을 

엘리멘트리(1단계) -> 프리 인터미디에잇(2단계) -> 인터미디에잇(3단계) -> 어퍼 인터미디에잇(4단계) -> 어드밴스드(5단계) -> 그리고는 엑스퍼트 였는지 마스터였는지 하여간 최고단계인 6단계까지 이렇게 나누었었다.

 

갈때는 인터미디에잇(3단계) intermediate 였던 것이 돌아올 때쯤에는 그래도 아주 약간 업그레이드 되어서 어퍼 인터미디에잇(4단계) upper intermediate가 되었었지만 한국으로 돌아온 후 다시 인터미디에잇(3단계) intermediate로 완전히 돌아왔다.

 

그리고 그게 지금까지 변함이 없다. 

 

 

15년전에 다녔던 시드니 kent street의 랭귀지 스쿨.

 

20대초부터 왜 나는 영어가 늘지 않을까 하고 늘 고민했다. 그러다 자각한 뼈아픈 사실은, 나는 영어를 제대로 공부해 본 적이 없다는 것이다.

한번도 무언가를 A부터 Z까지 제대로 끝마쳐 본 적이 없는 나의 성향 탓이다. 호주까지 가서도 공부는 제껴두고 놀기 바빴다.

성인 ADHD가 아닐까 하고 스스로를 의심하는 나는 항상 무언가를 해도 띄엄띄엄하게 되는데, 아니나다를까 영어공부도 그렇다. 그래도 내 인생에서 가장 치열하게 영어를 공부 했던 시기가 딱 두번이 있었다.

 

첫번째, 중학교때 전교에서 가장 무서운 선생님이 영어를 가르치던 때였다. 말 안듣는 아들때문에 화가 나서 설거지하던 후라이팬을 던졌는데 후라이팬이 방문에 날아가 꽂혔다던, 체구는 자그마하지만 아주 무섭고 파워풀한 여성이셨다. 학생들보다 키가 작지만 교내에서 제일 성질더럽기로 소문난 이 분은 여학교에서도 매일같이 학생들을 패고 다니셨다. 지금은 상상도 할 수 없는 이야기지만 그때는 그랬다.

그래도 학생들에게 공포는 살지언정 미움은 사지 않았던 것이 이분에게는 절대적인 2가지 원칙이 있었다. 1. 숙제를 해올 것. 2. 안해오면 맞는다.

 

문제는 그 숙제라는 것이 영어 교과서 단원 하나를 통째로 외워오는 것이라는 데 있었다. 첫 수업날 앞으로 매주 한 단원의 모든 문장을 외워오는 숙제를 내 줄 것이고 해오지 않은 사람은 맞는다는 아주 간결한 규칙을 알려주셨다. 학생들은 모두 코웃음쳤다. 영어 단원 하나를 며칠만에 통째로 외운다는게 가능하지도 않을뿐더러 그걸 매주 검사하리라고 생각하지 않았었다.

 

자연스럽게도 다음 수업시간이 돌아왔을 때, 숙제를 해온 학생이 거의 한명도 없었던 걸로 기억한다. 지금은 잃어버렸지만 당시에는 나에게 책을 몇번만 봐도 잘 외워지는 참 좋은 능력이 있었다. 아무도 안해와서 흐지부지 될것 같기도 했지만 겁이 많았던 나는 왠지모를 불안감에 일단 거의 다 외웠다. 

 

90년대 중반에 사용하던 중학교 영어 교과서. 중고책 판매 페이지에서 퍼왔다.

 

그래서 다행히 살아남았다. 그 전설의 레전드인 선생님은 자신이 했던 말을 철저히 지켰다. 당시 50명이 넘던 반 아이들을 모두 일일히 종아리를 때리셨는데, 단 한명도 제외하지 않고 처음부터 끝까지 똑같은 강도를 지켰다. 한명당 3대씩이었나 5대씩이었던가.

나와 다른 한명정도를 제외하고 나머지 모든 학생이 풀스윙으로 종아리를 맞았다. 우리보다 체구도 작았던 가냘픈 여자 선생님이 도대체 식단구성을 어떻게 하시는지 궁금해질만큼 한시간내내 같은 강도로 때렸다. 두번째 수업은 그렇게 맞느라 시간이 다 갔다. 

 

그 다음 수업부터는 기적이 나타났다. 나는 그때 인간에게는 한계가 없다는 것을 깨달았다. 한반에 한두명씩 있는 학업을 아예 포기한 친구들을 제외하고 모든 학생들이 교과서를 외워온 것이다. 영어단원 하나를 통째로 외운다는 게 누구에게나 가능한 일인 줄 그때 처음 알았다. 반에서의 등수와 상관없이 공부를 잘하고 못하고와 상관없이 외워왔다. 그야말로 두뇌의 신비였다.

 

그 선생님은 항상 공평했다. 때리면서 공평하다고 하니 좀 이상한데, 자신의 감정에 따라 매를 휘두르는게 아니라 안해오면 때리고, 해오면 안때렸다. 1년 내내 강철같은 선생님이었지만 느슨할 때도 있었다. 바로 열심히 외우려고 노력한 흔적이 있을 때였다. 실컷 외웠는데 생각이 안나 버벅이면서 얼굴이 벌개져 고개를 숙이는 아이들은 봐주거나 살살 때렸다. 그러나 딱 봐도 외우려는 노력조차 안한 아이들은 사정없이 맞았다. 그리고 학생들을 미워하지 않았다. 

 

그래서 그런지 대부분 아이들도 불만이 없었다. 그 선생님 수업이 있는 날은 소위 일진인 아이들도 아침부터 영어교과서를 들고 공부하는 날이었다. 쉬는시간에 책상위를 뛰어넘어 다니던 아이들도 그날만큼은 쉬는시간을 쪼개가며 공부했다. 그렇게 지금은 상상도 할 수 없는 무슨 군대 훈련소같은 방식 덕분에 중학생때 영어 하나는 확실하게 공부 했다. 집안형편때문에 학원을 다닌적이 거의 없는데도 내가 영어 기초에 나름 자신이 있는 건 중1, 중2때 교과서를 통째로 외웠던 덕분이다. 

그때 공부해둔 걸로 수능때까지 버텼다. 고등학교에 가서는 놀기 바빠서 영어 공부를 한 적이 없다. (영어 교과서가 어떻게 생겼는지도 기억나지 않는다. 중학교 교과서는 어렴풋이 기억이 나는데) 그래도 수능 80점 만점에서 52점인가 나왔었다. 중학교때 열심히 해둔걸로 근근히 버틸만했다.

 

 

 

두번째로 영어에 초집중했던 시기는 몇년전에 어린이집 엄마들과 함께하는 영어 스터디를 이끌 때였다. 야나두를 잠깐 이용해보고 애니메이션으로 하는 영어공부에 눈을 떴을 때였다. 이런 체계로 스터디를 하면 재미있겠다 싶어서 방법을 연구하고 참여할 사람들을 모집해서 몇달간 진행 했었다.

방법은 이랬다.

 

1. 쿵푸팬더 1편을 우리말로 각자 본다. 그러면 어떤 스토리이며 대충 어떤 대사가 오가는지 기억하게 된다.

 

2. 이제부터 영어자막으로만 매일 30초정도의 분량으로 자른 영상을 본다. 그 중에서 자막에 일부러 자막에 포함시키지 않은 짧은 문장한개를 받아쓰기한다.

아직까지 너무 긴 문장은 힘들기 때문에 영어자막으로 보여준다. 당시에 우리 스터디그룹은 대부분 레벨 1 수준이었으므로 조금만 문장이 길거나 어려우면 포기하는 멤버들이 나왔다. 그래서 일단 모든 멤버가 최대한 지치지 않고 가는 걸 목표로 정했다. 그러니 문장은 최대한 단순하고 잘 들리며 흔히 쓰는 단어로 구성되어 있어야 했다.

액션씬이나 대사가 없는 씬은 잘라내기 때문에 하루30초 분량이라 해도 100일 정도면 애니메이션 한편을 완주하게 된다. 

 

3. 위 과정을 마치고 나면 다시 처음으로 돌아가 반복한다. 다만 이번에는 좀 더 긴 문장 두세개를 자막없이 받아쓰기한다. 이미 한번 다 들어본 문장이라 앞 사이클보다는 수월하다. 이 과정은 좀 더 짧게 걸렸던 것 같다. 70일 혹은 80일만에 끝났던 것 같다.

 

4. 위 과정을 다시 반복하는데 이번에는 문장이 더 길어지고 클립의 양도 늘어난다. 이렇게 해서 한두달 안에 세번째 복습을 마치는 게 목표였다. 

 

 

스터디모임은 나의 개인사정으로 4번 단계를 진행하다 중단하게 되었지만 이 시간은 내게 큰 경험이 되었다.

매일 영상을 편집하고 번역해야 했다. 기존 자막은 의역이 많아 영어 초보자들에게는 적합하지 않았다. 유아동이 우리말을 배우듯 직독직해하여 보여주어야 이해가 쉽기 때문에 모두 내가 손수 다시 번역해야 했다.

자막을 달고, 퀴즈를 낼 문장을 선택하고, 정답으로 제공할 영상을 다시 편집하고... 30초 분량의 클립을 위해 하루 한두시간씩 공을 들였는데 그렇게 즐거울 수가 없었다. 또 그렇게 영어에 몰입했던 적이 없었다.

그리고 이 때 나는 평생 컴플렉스였고 죽어도 안되던 듣기가 조금씩 되는 신기한 경험을 했다.

 

 

그래도 내 영어는 여전히 중학생 수준에 머물러있다. 도무지 늘지 않는다. 당연하다. 나는 영어에 시간을 그만큼 충분히 투자하지 않았다.

그동안 한번도 영어 학원을 2달 이상 다녀본 적이 없었고 영어 관련책을 처음부터 끝까지 본 적이 없었다.

 

그러다 작년부터 다시 영어공부의 필요성을 절실히 느낀 것은, 개발공부를 하면서 MDN문서를 봐야해서였다.

정말 무슨 말인지 하나도 모르겠다.

 

그나마 MDN문서는 깔끔하고 정제된 문장으로 되어 있어 하나하나 독해하려면 시간이 아~주 많이 걸려도 가능하지만, 스택오버플로우 같은 경우는 우리가 댓글 달 때 문어체로 달지 않는 것처럼 거기도 구어체가 많다보니 정말 무슨 말인지 전혀 못알아먹겠는 때가 종종 있다.

코드를 짜다 버그가 발생했을 때 1분 1초가 바쁜데.... 스택오버플로우 사이트에서 암호 해독하듯 떠듬떠듬 읽다가 포기하고 집어던지고 한글로 검색하며 얼마 나오지 않는 소스에 답답해 가슴을 칠때, 아.. 영어공부!!!!! 라는 단어가 머리속을 점령하곤 했다.

코드만 따온다고 끝이 아니라 나는 원리를 알고 싶은데! 그 원리가 다 영어로 씌여있다! ㅠㅠ

(파파고나 구글번역은 대체로 유용하지만 간혹 더 헷갈리게 할 때가 있으니)

 

그래서 나는 영어책을 그렇게 사모았나보다. 정작 보지도 않으면서. 그동안 사모은 게 수십권인데 얼마전에 그득하게 쌓여있는 문법책들이 너무 징그럽게 느껴져 몇권만 놔두고 다 내다버렸다. 

그리고 오늘 문득 책장에서 딱 눈에 띈 두권만 샥 뽑아들었다. 

 

이 책은 그동안 사본 책들 가운데에서도 정말 좋은 책이라는 생각이 들었던 책으로, 나처럼 초중급에서 애매하게 다음단계로 못넘어가는 사람들이 기초를 다시 다지고 싶을 때 유용하다. 하도 오래전에 배워둔 문법들이 자주 사용하지 않아 가물가물할 때, 정말 추천한다.

하루 분량이 4페이지 정도인데 쓰는 양이 얼마 안된다. 가벼운 마음으로 시작할 수 있다. 전혀 부담주지 않는다. 그러면서 문법을 한번 싹 훑는다.

 

이 책은 시리즈로 있는데 지금 내 책장에 있는 책은 그 중 2번째 책쯤 된다. 앞권은 어디로 사라졌는지 보이지 않는다. 앞권이 15일 안에 완성이고 뒷권에 해당하는 위 책이 또 15일에 완성, 합쳐서 한달안에 완성하는 프로그램이다. 정말 괜찮다. 눈높이 영어를 하던 기분으로 하루에 문법 한 파트씩 정복하는 것이다. 한달안에 기본문법을 다 훑을 수 있다. 물론 문법공부에 이미 조금 익숙한 사람이어야 효과가 있을 듯 하다. 자세하게 설명하지 않기 때문에.

 

이 책이 정말 좋다고 생각하는 것은, 예전에 스터디 모임을 이끌때 했던 방식처럼 문장 확장 방식으로 학습하게 되어 있다는 것이다.

첫 파트에서 '그것은 날아가는 비행기였어요'문장이 다음날에는 '그것은 산 너머로 날아가는 비행기였어요'로 발전한다.

이렇게 간단한 구조의 문장에서 살을 붙여나가며 문법을 전체적으로 훑는데 한권에 15일밖에 걸리지 않는다. 정말 마음에 든다.

 

이 책을 다 하고 나면 다음 단계로 에세이 라이팅이 있고 그 다음단계로 이메일 라이팅이 있다. 

총 합쳐서 100일 완성 프로그램이라고 한다. 

오늘부터 도전한다. 한번도 영어 책 하나를 마스터해본 적이 없는 내가 이 책을 마스터해보기로 결심했다.

100일동안 할 것이 참 많다. 꿈 100일쓰기도 한달째 하고 있고...

 

이 책은 어원으로 하는 단어 공부에 꽂혔을 때 샀던 책이다. 오래전에 뇌새김 영어를 잠깐 체험했을 때였다. 어원 하나를 알면 단어 한개를 외워도 약간씩 변형된 다른 단어 7~8개까지 더 알수 있으니 암기하는게 죽도록 싫은 나한테는 획기적인 방법이라고 생각했다.

 

그때는 매우 효율적이라고 생각했는데 지금은 사실 잘 모르겠다.

맥락없이 단어만 외우는 것에 회의감이 있어서다. 그런식으로 기억한 것은 뇌가 오래 가지고 있지 못한다는 것을 알게 되어서이다. 어원을 안다는 것 자체가 단어에 대한 맥락을 알게 되긴 하지만... 경험상 단어만 외우는 것보다 그 단어를 포함한 통문장으로 외우는 것이 가장 효과적이었다. 아이들이 동화책으로 영어를 배우듯이 배우는 것이다.

이 부분은 사실 내가 아직 잘 모르기 때문에 가타부타하기가 어렵다. 일단은 이 책도 좋은 책이니 시도해보기로 한다.

 

 

돌이켜보면 내가 스스로 집중과 몰입했을 때 영어가 늘었었다. 학원을 가서 한시간 앉아있다 오는 동안에는 는다는 느낌이 들지 않았었다. 심지어 비싼 돈을 주고 하루종일 어학원을 다닐때도 마찬가지였다.

중학교때 맞지 않기 위해 미친듯이 한가지 방법으로 한우물을 팠을 때, 영상편집하고 문제 만드는 게 재미있어서 미친듯이 몇달간 집중했을 때, 그때 습득한 게 내 영어의 거의 전부다.

두 시기의 공통점은 내가 스스로, 집중하고 몰입했었다는 점이다.

 

결론.

15년째 초중급인 내 영어 좀 어떻게 해보고 싶을 때, '좋은 책'을 골라 한권을 마스터해본다. 나 스스로.

 

오늘은 여기까지. 끝.

 

 

 

 

미라클 북클럽의 이번 책은 김상균 교수님의 메타버스2 였다.

 

나도 현재 메타버스 수업을 하고 있지만, 메타버스라는 개념에는 어떤때는 회의적이었다가, 어떤때는 긍정적이었다가 오락가락하는 편이었다. 메타버스가 무엇인지 사전적 설명은 할 수 있었지만, 누군가가 그래서 메타버스가 게임과 뭐가 다른데? 하고 물어온다면 쉽사리 답할 수가 없었다.

 

메타버스가 무엇인지 어떤 플랫폼들이 현재 나와있는지를 알려주는 책들은 많았지만, 정말 메타버스가 우리 삶을 바꿔놓을까? 주가를 띄우기 위한 기업들의 설레발은 아닐까? 이런식으로 사라져갔던 과거 기술들이 얼마나 많았던가? 예를 들면 처음 등장할 때는 모든 TV시장을 집어삼킬것만 같다가 지금은 언급조차 되지 않는 3D TV처럼, 메타버스라는 기술도 곧 그렇게 시들해지지 않을까? 이런 질문들에 속시원하게 답해 줄 자료를 찾고 있었다.

그래서 정한 책이 이 책이었다.

 

 

미라클 북클럽에서는 한 책을 가지고 3주간 토론한다. 그동안 경험해 본 바, 1달은 너무 길었고, 2주는 항상 아쉬웠다. 그래서 3주로 정했는데 아주 만족스럽다. 책을 꼭꼭 씹어 읽기에 딱 적당한 기간이다.

어제는 이 책의 첫 주간으로, 나는 겨우 50페이지밖에 읽지 못하고 참석했다. 그런데 그 안에서 토론을 나누다 보니 메타버스에 관한 많은 생각들이 정리가 되는 것을 느꼈다. 혼자서 사색하는 것보다 훨씬 많은 것을 내 안에서 정립할 수 있었다.

 

 

 

1. 무료봉사자 VS 소득을 창출하는 크리에이터

심즈라는 게임이 있다. 이 심즈를 플레이 해본 사람들은 요즘 많이 활용되고 있는 게더타운같은 메타버스 공간이 익숙하지 않을까 생각한다.

심즈의 매력은 내가 건축가 & 인테리어 디자이너가 되어 실제로는 상상만 해볼 수 있는 멋진 집들을 마음껏 지어볼 수 있다는 점이었다.

그 매력에 푹 빠져서 당시 함께 모여 게임하던 친구들이 전략시뮬이나 총싸움을 하는 동안 나는 밤이 새도록 심즈에서 집을 짓고 놀았다.

방은 몇개를 만들지, 화장실은 몇개로 할지, 욕조를 놓을지 말지, 집은 2층으로 할지 3층으로 할지.

 

그렇게 집 구조를 결정한 후 벽지와 바닥재를 원하는 취향대로 바꾼다. 벽지와 바닥타일은 현실뿐만 아니라 가상공간에서도 정말 중요해서 집 전체의 분위기를 바꾸는데 결정적이었다.

 

이렇게 일차적인 인테리어를 끝내고 나면 거기에 알맞는 디자인의 가구와 가전제품들을 배치한다.

쉐비 스타일로 꾸미고 엔틱가구를 놓을 수도 있고, 아니면 모던한 벽지를 발라놓고 무채색의 가구들을 들여놓아 뉴욕의 펜트하우스처럼 꾸밀 수도 있었다. 

 

그런데 문제가 있었다. 미국에서 개발한 심즈가 기본적으로 제공하는 벽지와 바닥타일로는 내가 원하는 그 느낌이 안나는 것이다. 

대충 이런 느낌
이렇게 현실과 동떨어진 인테리어...

 

 

 

특히나 나는 불만이었던 것이, 당시에도 일본의 ZEN스타일이 세련된 것으로 여겨져 일본풍의 벽지와 바닥 아이템들이 많았다.

하지만 한국풍은 어디에도 없었다. 그래서 최대한 한국적인 스타일로만 꾸며도 결국은 묘하게 일본풍이 났다. 나는 그 점이 늘 마음에 안들었다. 

한국 유저가 제작한 것으로 보이는 심즈1의 한국풍 전통 벽지. 한국 스타일 벽지나 아이템은 매우 귀했다.

 

 

 

자연스럽게 심즈를 이용하던 유저들 중 능력자들이 벽지와 바닥타일, 심지어 가구, 가전제품같은 아이템들을 제작하여 인터넷상에 올렸고, 전세계 사람들이 다운로드를 받으러 들락거렸다. 그런 파일들을 모아놓은 사이트들은 당시에도 엄청난 방문객 수를 자랑했다.

그런 사이트의 게시판에는 어떤 풍의 벽지를 제작해달라는 요구가 끊임없이 올라왔고 특히 현실 집과 물건에 가깝게 만들어진 아이템, 벽지 들은 굉장한 인기를 자랑했다. 현실느낌이 많이 날수록 인기도 높았다. 

그 당시에도 사람들은 게임냄새 풀풀 나는 기본템보다, 유저들이 직접 제작한 현실과 꼭 같은 느낌을 내게 해주는 아이템들에 관심이 많았다.

이케아 소파가 올라왔을 때도 난리가 났었다. 심즈의 기본 쇼파는 너무 가짜같았기 때문이다.

 

대충 이런 느낌. 비주얼적으로만 보자면 현실감이 매우 낮다. 현실과 동떨어진 아이템 디자인 탓이 크다.

 

많은 이용자들이 위와 같은 벽지와 바닥재를 스스로 디자인하여 인터넷에 올렸다. 그리고 그보다 백배는 많은 이용자들이 그런 파일들을 다운로드해서 받아갔다.

 

심즈를 통해서도 알 수 있듯이 기본적으로 사람들은 가상공간에서 현실을 똑같이 구현해내는 데에 관심이 많다. 여기에 대해서는 나중에 다시 이야기하겠다.

유저들이 만들어내는 아이템들은 어마어마하게 많아져서 나중에는 벽지 몇개를 고르기 위해 밤을 새서 사이트들을 뒤져야 했다. 

그래도 내가 만들어내고 싶은 느낌을 구현해내고 나면 그렇게 기쁠 수가 없었다. 이것은 유저들이 창작한 실제와 비슷한 아이템들이 있었기 때문에 가능했던 것이다.

 

 

초기 심즈에서는 사용자들이 구리고 구린 기본 아이템들로부터 최대한 벗어나 이렇게 고급스러운 집을 건설하고자 몸부림을 쳤다.

 

위와 같이 잡지에 나올법한 멋진 집을 디자인한 유저들은 인터넷에 공개하며 자랑스러워했다. 그러나 자랑스러운 기분과 다른 유저들의 부러움, 그것이 끝이었다.

 

유저들의 스킬은 점점 더 발전하여 거의 건축 공모전같은 느낌을 주기도 했다.

 

 

수면 아래 잠겨있는 모던 하우스. 최근의 심즈로는 이렇게까지 구현이 가능하다. 점점 더 현실감을 더해가고 있다.

 

 

심즈4로 구현한 우리나라 시골 할머니집 인테리어

 

 

심즈를 보며 알 수 있는 것은 다음과 같다.

1. 사람들은 내가 살고 있는 현실 아주 그럴듯하게 가상공간에 구현해 내는 것을 매우 즐긴다 (이는 심즈 뿐만 아니라 훨씬 이전에 유행했던 심시티를 봐도 알 수 있다)

2. 가상공간이 현실과 흡사할수록 열광한다.

 

특히 1번은, 저때 거의 모든 유저들은 밤을 새워 손수 제작한 아이템을 올려도 아무런 대가가 없었다. 사람들은 그것을 무료로 다운받아갔고 나중에는 원작자가 누군지도 모르게 인터넷 여기저기를 돌아다녔다. 그런데도 헤비 업로더(꾸준히 많은 자료를 올리는 사람들)들은 자신들이 제작했다는 것을 사람들이 모르는데도, 돈이 주어지지 않는데도 열심히 만들어서 인터넷에 올렸고 많은 사람들은 여전히 공짜로 받아가 즐겼다.

이런 부분은 웹 2.0의 특징과 맞닿아있다. (인터넷의 발전 단계 중 공유가 기본이며, 데이터 무료로 사용하는 것이 보편적 통념인 단계. 데이터의 소유권을 딱히 중요하게 생각하지 않음)

 

그런데 이제 시대가 달라지고 있다.

처음 유튜브가 등장했을 때, 사람들은 자기들만의 비법, 레시피를 인터넷에 아낌없이 공개하는 사람들에 대해 적잖이 충격을 받고 우려하기도 했다. 그 이전에는 음식장사를 하는 사람들의 레시피는 본인들의 보물과 같은 것이었고 돈을 받고 넘겨줄지언정 공짜로 세상에 공개하는 일이 흔하지 않았다. 어떤 특수한 취미, 공예, 기술, 이론들을 보유한 강사, 장인들도 마찬가지였다.

그런데 유튜브가 그 모든 것을 '공유'라는 운동장 위에 올려놓았다. 유튜브를 이용하여 수익을 얻을 수는 있지만, 기본적으로 이용자에게는 무료이다(유튜브 구독료를 제외하고).

 

그동안 전세계가 타인의 귀한 비법, 자료, 스킬, 경험들을 공짜로 즐겼다. 지금도 마찬가지이다. 하지만 모든 세상은 정반합의 원리에 의해 굴러간다. 지식 공유의 시대가 한바탕 몰아치고 지나가자, 이제 다시 유료 강의 플랫폼들이 떠오르고 있다. 클래스 101, 숨고, 꾸그, 타인의 지식과 노하우를 정당하게 돈을 내고 이용하는 흐름이 다시 슬며시 온 것이다. 공짜의 시대는 점점 지나가고 있다

 

 

그 배경에는 블록체인이 등장하며 다가온 웹 3.0의 시대가 있다. 블록체인 기술덕분에 인터넷상의 많은 자료들에 고유값을 쉽게 매길 수 있게 되었고 그것이 바로 NFT이다. 위에서 이야기한 심즈를 예로 든다면, 내가 만든 벽지를 NFT화 하여 이것을 구매한 사람만 사용하게 할 수 있는 것이다.

이전에는 밤새워 만든 자료를 인터넷에 올리고 다운로드 수가 몇천 몇만을 찍는 것을 보면서 흐뭇해하거나 내가 만든거라고 지인들에게 자랑하는 정도가 보상이었다. 하지만 이제는 블록체인과 NFT 덕분에 이야기가 달라진다. 지금까지는 무료봉사이자 재능기부였지만 이제는 그에 대한 대가를 전세계 누구로부터 받을 수 있게 된다. 따로 스토어를 개설하고 사업자를 내고 어쩌고 하는 복잡한 과정이 없이도 말이다.

 

그래서 NFT가 창작자들에게 유토피아를 맞이하게 해줄 거라고도 한다. 

 

벌써 메타버스 아이템을 디자인하고 판매하여 월 천만원을 번다는 중고등학생들도 미디어에서 볼 수 있다.

 

 

 

메타버스는 곧 보편화될 것이다. 그건 막을 수 없는 흐름이다.

인터넷이 초기에 전세계에 광풍을 불러왔고, 지금은 사용하지 않는 사람이 없는 것처럼 말이다.

메타버스는 다른 수식어를 다 떼고 가장 짧게 표현한다면 '가상공간'인데, 사람들은 갈수록 세련되고 더 현실감있는 가상공간을 원할 것이고, 초창기인 지금이야 뚝딱거리는 그래픽들을 보며 이게 무슨 가상공간... 할 수도 있지만 앞으로 갈수록 발전할 것이다.

초기 인터넷을 생각해보면 된다. 초기 인터넷 화면은 이랬다.

 

 

지금의 인터넷은 어떤가? 최근에 저런 디자인의 화면을 본 적이 있다면 아마 누군가 15년전 쯤에 만들어놓고 관리하는 것을 잊었거나 포기한 유적지와 같은 사이트일 것이다. 메타버스도 다르지 않을 것이다. 지금의 메타버스라고 불리우는 플랫폼들은 사용자들의 눈에 차지 않겠지만, 메타버스 플랫폼은 이제 시작이다.

 

현재 메타버 비즈니스 모델로 많이 사용되고 있는 게더타운. 마치 90년대에 하던 게임과 같은 화면이다.

 

교육용으로 많이 사용되는 코스페이시스는 그나마 나은편이나 이게 현실을 대체한다고 생각하면 아직은 우스운 수준이다.

 

초기 기술은 언제나 허접하고 우스워보인다. 이게 그렇게 세상을 바꿀거라고? 싶다. 

하지만 앞으로 컴퓨터 사양과 통신망(5G를 넘어선 6G가 또 나오겠지?)이 업그레이드 되면, 훨씬 실제와 비슷한 메타버스가 나타날 것이다.

그렇게 되면 우리가 현재 50년전 사람들은 상상도 못했던 옷과 음식을 인터넷으로 주문하는 세상에 살고 있듯이, 

지금의 우리는 상상하기 힘든, 메타버스 세상 안에서 하루의 상당시간을 거주하는 세상에 올 것이라고 생각한다.

 

그 세상이 유토피아일지 디스토피아일지는 다음 편에서 생각해보려고 한다.

'IT' 카테고리의 다른 글

포토샵이 없어도 포토샵을 사용할 수 있다? - 포토피아  (0) 2022.06.11

MySql 서버를 재시작 하고 싶은데 The server quit without updating PID file 오류가 발생하면서 안될 때가 있다.

$ mysql.server restart
Shutting down MySQL
. ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/iain-ui-MacBookPro.local.pid).
 ERROR! Failed to stop running server, so refusing to try to start.

대충, 서버가 PID파일을 업데이트 하지 않고 종료되었다는 메세지이다.

그리고 서버 실행을 멈추지 못했으므로 서버 재시작을 거부한다고 한다.

내 경우에는 mysql.server stop을 먼저 실행해주고 나서 mysql.server restart를 하면 성공적으로 진행이 됐다.

$  mysql.server stop
Shutting down MySQL
. SUCCESS!
 $ mysql.server restart
Shutting down MySQL
. SUCCESS!
Starting MySQL
. SUCCESS!

그러나 위 방법으로 해결이 안될 때를 대비하여 에러 해결법을 적어둔다.

 

 

 

 

컴퓨터에서 실행 중인 MySQL 프로세스 확인하기. 터미널에서 아래 코드를 실행한다.

ps -e | grep mysql

 

그럼 이렇게 결과가 나오는데, 실행중인 프로세스들이 있다는 뜻이다.

 

실행 중인 프로세스를 종료하기 위한 구문

kill -9 <PID>

PID란 맨 왼쪽의 다섯자리 숫자이다. 위 캡쳐에서는 83773, 83872, 83970이 되겠다.

PID를 이용하여 실행중인 프로세스들을 차례로 kill하고 다시 시작해보면 되겠다.

 

PID란 Process Identification의 약자이다. 프로세스가 실행된 후 종료될 때까지 시스템이 프로세스를 고유하게 식별하도록 하는 '프로세스 식별자'이다.

 

 

참고 : https://sebhastian.com/starting-mysql-error-the-server-quit-without-updating-pid-file/

공공재

모든 개인이 공동으로 이용할 수 있는 재화 혹은 서비스.

국방, 경찰, 소방, 공원, 도로 등이 해당하며 보통 정부에 의해서 공급되는 것을 말한다.

공공재에는 시장가격이 존재하지 않으며 수익자부담 원칙도 적용되지 않는다.

공공재 규모의 결정은 정치기구에 맡긴다.

한 개인의 소비가 다른 이의 소비를 방해하지 않으며, 여러 사람이 동시에 편익을 받는다는 특징이 있다. 

또한 대가를 지급하지 않은 특정 개인을 소비에서 제외하지 않는다.

공급탄력성

가격변화에 대한 공급의 민감도이다.

공식 : 공급량의 변화율 / 가격의 변화율

만일 1%의 가격 상승이 1%보다 더 큰 공급량 증가를 가져오면 공급이 탄력적이라고 말하고

1%의 가격 상승이 1%보다 더 적은 공급량 증가를 가져오면 공급이 비탄력적이라고 한다.

즉, 가격이 상승했을 때 공급량이 그에 비해 얼마나 늘어나는가이다.

가격이 조금만 상승해도 공급량이 크게 증가한다면, 공급이 탄력적이며 가격이 상승한 것에 비해 공급량 증가가 그럭저럭이라면 공급이 비탄력적인 것이다. (가격을 올렸더니 고무공처럼 공급량이 팍 튀더라 혹은 가격을 올려도 공급량이 그리 움직이지 않더라)

 

공급량 변화율과 가격의 변화율이 같아서 공급탄력성이 1이 될 경우는 공급이 단위 탄력적이라고 말한다.

만약 어떤 재화가 가격변동에 전혀 영향을 받지 않아 공급량이 그대로라면, 공급의 가격탄력성은 0이고 완전 비탄력적이라 말한다. 이 경우 공급곡선은 수직선이 된다.

공급탄력성은 가격 상승 하락에 따라 공급량을 조절하는 생산자의 능력에 따라 달라진다.

공매도

없는 것을 판다는 의미로 주가 하락을 예상하는 투자자가 금융기관으로부터 주식을 빌려서 먼저 매도한 후, 일정 시점 후에 시장에서 주식을 매입하여 되판다. 매도가 매수보다 먼저 일어나는 특이한 거래이다. 지금 가지고 있지도 않은 주식을 먼저 팔고 나중에 사서 갚는 것이다.

사는 시점에서 주가가 내려가있으면 이득이지만 (비싸게 팔고 싸게 사서 갚았으므로) 예측이 빗나가 주가가 내려가있다면 손해를 보게 된다.

가뜩이나 약세장에서는 주가 폭락을 초래하는 측면이 있으므로(주가가 떨어질 것이라 생각하고 너도 나도 빌려서 대량으로 팔아버리므로 그렇지 않아도 락세를 탄 주가가 곤두박질 치게 만든다) 각국에서는 공매도에 대해 많은 규제를 하고 있다.

 

국가신용등급

한 국가의 정부가 빚을 갚을 수 있는 능력이나 빚을 갚을 의사를 평가한 것. 국제신용평가사가 매긴다.

국제금융시장에서 차입금리나 투자여건을 판단하는 기준이 된다.

미국의 S&P, 무디스, 영국의 피치 등 유명 국제신용평가기관들이 해당국의 정치체제의 안정성, 국가안보의 위험 등 정치적 요소와 경제성장률, 외채규모, 대외 채무불이행 경험등 경제적 요소를 종합적으로 고려하여 평가한다.

크게 투자등급과 투기등급의 신용도로 나뉜다.

국가신용등급이 올라가면 정부와 기업, 금융기관등이 더 낮은 가산금리(=위험 프리미엄)로 외화를 조달할 수 있어 외화차입 비용을 크게 줄일 수 있다.

 

국채

정부가 재정자금을 조달하기 위해 발행하는 채권.

국고채권, 재정증권, 국민주택채권 및 보상채권으로 나뉘며 국고채권이 대부분을 차지한다.

국고채권은 적자재정시 재원을 조달하기 위해 국채법에 의해 발행되며 만기는 3년, 5년, 10년, 20년, 30년, 50년 등 6가지 종류가 있다.

경쟁입찰방식으로 발행된다.

금본위제

금산분리

가산금리

기준금리에 추가로 덧붙는 금리이다. 신용도에 따라 다르게 붙는다.

신용이 좋으면 가산금리가 낮게 붙고 신용이 나쁘면 가산금리도 더 많이 내야 한다.

다른 말로 스프레드라고도 한다.

기준금리와의 차이를 나타내며 기준금리와의 격차가 1%일 때 100bp(bp = 베이시스포인트), 0.5%일 때 50bp로 표시된다.

1베이시스포인트는 0.01%, 소수로 표시하면 0.0001이다.

만약 이자율이 2.00%에서 2.50%로 오른다면 금리격차가 0.5%이며 이 경우 이자율이 50bp 올랐다고 말할 수 있다.

 

더 자세히 알고 싶다면 아래 페이지를 참고하자.

https://www.cmegroup.com/ko/education/learn-about-trading/courses/introduction-to-eurodollars/the-importance-of-basis-point-value.html

 

경기동향지수

= 경기확산지수

경기변동의 진폭이나 속도는 측정하지 않고 변화방향만을 파악하는 지수. 경기의 국면 및 전환점을 식별하기 위한 지표로서 경기확산지수라고도 한다.

경기변동이 경제의 특정부문에서 전체 경제로 확산, 파급되는 과정을 경제부문을 대표하는 각 지표들을 통하여 파악하기 위한 지표.

이때 경제지표 간의 연관관계는 고려하지 않고 변동 방향만을 종합하여 지수로 만든다.

계절변동과 불규칙 요인이 제거된 전체 계열 중에서 전월에 비해 증가한 지표수가 차지하는 비중으로 나타낸다.

10개의 대표 계열중 7개의 지표가 증가하는 방향으로 움직였다면 경기동향지수는 70%가 된다.

50을 기준으로 50보다 크면 경기가 확장되고 있다고 보고 50보다 작으면 수축되고 있다고 본다.

 

 

경상수지

외국과 재화, 서비스를 사고파는 경상거래의 결과이다.

상품수지, 서비스수지, 본원소득수지 및 이전소득수지로 구성된다.

- 상품수지 : 상품 수출입의 결과

- 서비스수지 : 운송, 여행, 건설 등 서비스 거래의 결과

- 본원소득수지 : 급료 및 임금수지, 투자소득수지 등

- 이전소득수지 : 무상원조, 증여성 송금 등의 결과

경제발전 및 정책변화의 효과를 측정하거나 전망하기 위해 사용된다.

 

고용률

통계청에서 매월 작성하는 경제활동인구조사에서 집계된 15세 이상의 노동가능인구 대비 취업자의 비율.

근로시간이 18시간 미만인 단시간근로자 및 일시휴직자 등 불완전취업자가 증가할 시 체감되는 고용상황과 괴리가 있게 된다.

 

고정금리

최초에 정한 금리가 만기때까지 그대로 유지되는 금리.

일반적으로 고정금리가 변동금리보다 높으며 이는 금리 변동에 따른 은행의 리스크를 감안한 것이다.

 

고통지수

소비자물가상승률 + 실업률

국민의 삶의 질을 측정하기 위한 지표이다. (1975년 미국 경제학자 오쿤에 의해 고안)

이 수치가 높다는 것은 실업자가 늘고 물가가 상승해서 국민들이 느끼는 삶의 고통이 증가했다는 의미이다.

단 빈부격차나 개인이 느끼는 고통의 정도의 차이, 나라별로 상이한 상황들 때문에 절대적인 지표로서는 무리가 있고 그 이후 이를 보완한 다양한 지표들이 개발되고 있다. (ex. 배로고통지수. 오쿤의 고통지수에 국민소득증가율과 이자율을 감안)

 

골디락스 경제

경기과열 혹은 불황이나 높은 인플레이션이 없는 양호한 경기가 지속되는 경제. 태평성대.

 

"엄마, 그거 동화책 아니에요? 엄마가 그런 걸 왜 읽어요?"
"엄마가 먼저 봐야 네가 읽을 만한 책인지 아닌지 알 수 있지."
그렇게 어머니는 모든 책을 자신이 먼저 읽고 나서 꼭 필요한 책만 나에게 읽게 했다. 어머니 덕분에 꼭 읽어야 할 책들은 모두 읽었고, 나중에시간이 지나서야 그게 나에게 얼마나 큰 도움이 되었는지를 깨달았다. 35p
"엄마. 외할머니가 절 막 때렸어요. 마치 복날에 개 잡듯이 팼어요."
어머니가 까르르 웃으시더니 말씀하셨다.
"복날에 개 잡듯이 팬다는 말은 어디서 배웠니?"
그러고는 다정하게 나를 바라보며 말을 이었다.
"할머니는 옛날 분이시라서 가르치는 방식이 조금 다를 뿐이야. 너를 미워하는 것이 아니니까 외할머니를 미워하거나 워망하면 안 된다."
나는 갑자기 울음이 터졌다. 서러웠다. 어머니마저 내 편이 되어주지 않았다고 느꼈기 때문이었다. 나를 달래며 어머니가 말씀하셨다.
"그래도 외할머니처럼 고마운 분이 어디 있겠니? 밥 세끼 꼬박 꼬박 다 챙겨서 먹여주시지, 더러운 체육복이나 속옷까지 다 손으로 빨아주시지, 우리 주위에 그런 일을 해줄 사람이 또 누가 있겠니? 너도 이제 다 컸으니 외할머니 고마운 줄 알고, 좀 때리시더라도 네가 그냥 이해해 드려라. 너 남자잖아 짜식아. 울지 마!"
어머니의 말을 듣자 나는 기분이 한층 나아졌다. 어머니는 울지 말라고 윽박지르거나 명령하는 대신, 상황을 이해하기 쉽게 설명해 주셨고 나는 그런 어머니의 모습이 너무 좋았다. 
내 울음이 잦아들자 어머니는 나를 안으며 말씀하셨다.
"엄마가 미안해. 고생시켜서 미안해. 나중에 꼭 돈 많이 벌어서 데리러 올게. 그때는 엄마랑 같이 살자."
어머니와 대화를 나누고 나니 외할머니를 이해할 수 있을 것도 같았다. 38p
수업이 끝나고 쉬는 시간을 알리는 종이 울렸다. 나는 자리에서 벌떡 일어나 그 애에게 다가갔다. 이번에는 인사도 없이 곧바로 발로 얼굴을 걷어찼다. 싸움에서 이기는 방법은 간단하다. 그것은 이길 때까지 싸우는 것이다. 43p
공부도 마찬가지다. 공부도 땅과 다를 것이 하나도 없다. 많은 사람들이 공부를 하지만, 자신이 만족할 만큼의 성과를 내지 못하는 이유는 간단하다. 그건 돌려받을 마늠 공부하지 않았기 때문이다. 공부와 땅, 둘 다 절대 거짓말을 하지 않는다. 결국 노력한 만큼 돌려받으며 힘을 쏟은 만큼 이루어진다. 59p
암기의 비결은 결국 '체계적인 정리'와 '반복 학습'에 있다. 나는 외울 내용을 압축하고 또 압축한 정리 노트를 만들어서 가지고 다니면서 틈나는 대로 외웠다. 64p
개념원리를 보다가 이해하기 힘든 부분이 나오면 바로 중학교 수학책을 펼쳤다. 고등학교 1학년 수학에서 배우는 내용의 대부분이 중학교 과정의 심화였기 때문이다.
그래서 개념원리를 봐도 이해가 안 가면 중학교 과정을 본 후 고등학교 과정으로 돌아와서 문제를 풀었다. 그 방식은 매우 효과적이었다. 기초가 탄탄히 잡히니 풀리는 문제도 더욱 많아졌다.
영어는 처음에는 단어를 몰랐기 때문에 해석을 제대로 할 수 없었다. 그렇다고 단어 책을 사서 외우자니 너무 지겨웠다. 그래서 내가 선택한 방법은 '선 해설 후 문제'방식이었다. 문제집 뒷 부분의 답지를 펼친 후 해석을 한 줄 먼저 보고 영어 지문을 읽는 방식이었다. 이렇게 계속 공부를 하니 점점 영어 표현이 익숙해졌다.

다시 공부를 시작했을 때 나는 기초가 하나도 없었다. 그런 상황에서 가장 어려웠던 점은 바로 수업을 따라가기가 힘들다는 것이었다. 공부를 잘하려면 크게 두 가지 원칙을 지켜야 한다. '수업에 집중하기'와 '기초부터 차근차근 공부하기'. 그러나 공부를 늦게 시작한 나는 두 원칙을 동시에 지킬 수가 없다. 학교 수업이 이미 기초를 넘어선 단계까지 나가 있었으니까.
내가 선택할 수 있는 방법은 두 가지였다. 하나는 수업을 따라가는 것을 포기하는 대신 계획을 세워 처음부터 차근차근 공부하기. 다른 하나는 수업을 어떻게든 따라가려고 애쓰면서 이미 지나가버린 진도와 기초는 따로 시간을 내어 보충하기.
나는 둘 중 하나만 잡기보다는 둘 다 잡아야겠다고 생각했다. 물론 무모한 결정이었다. 머리도 그다지 좋지 못한 내가 예습과 복습을 하면서 이미 지나가 버린 진도까지 공부하기에는 시간이 턱없이 부족했다. 그런데 왠지 나는 할 수 있다는 자신감이 있었다. 오기였다는 표현이 더 정확할지도 모르겠다. 만약 시간이 모자라면 1초를 열 번 나누어 쪼개 쓰더라도 어떻게든 해내겠다고 각오했다. 104p
수업 전에 최소한 한두 번은 미리 훑어보려고 노력했다. 그래야 기억에 오래 남기 때문이다. 예습과 복습을 꾸준히 하면 전체 공부 시간은 훨씬 줄어든다. 수업 전에 한 번 훑어보고, 수업을 듣고, 그날 자습시간에 복습을 하면 같은 내용을 하루에 세 번 보게 된다.그러면 왠만한 내용은 머릿속에서 체계가 잡혀서 저장된다. 물론 다음 날 일어나면 또 다시 잊어버린 것 같겠지만, 시험 기간 때 다시 집중해서 들여다보거나 외워 보면 의외로 쉽게 되살아난다. 그게 반복의 힘이고 예습, 복습의 힘이다. 105p
처음에는 공부해야 할 것이 산더미 같았다. 웬만한 것들은 다 몰랐으니까. 그러나 참고 꾸준히 했다. 이 단계에서 가장 중요한 것은 공부법이 아니라 참을성이다. 많은 학생들이 참는 단계에서 실패한다.
"공부가 정말 이렇게 힘든 거라면 나는 도저히 못 할 것 같다"라는 말이 이때 나오게 된다.
그래도 참아라. 당장은 괴롭겠지만 그 기간은 절대 오래 지속되지 않는다. 계속 공부를 하다 보면 신기하게도 점점 공부할 양이 줄어든다. 내가 공부해야 할 전체의 양을 보지 말라. 그러면 압박감이 느껴지고 공부가 힘들어진다. 단지 오늘, 지금 이 시간에 해야 할 부분만 의식하면 공부를 쉽게 할 수 있다.
공부한 부분을 기록하는 습관은 이 기간을 좀 더 쉽게 통과하는 데 많은 도움이 된다.(참는 단계를 지나면 찾아오는 것) 105p

처음에는 공부해야 할 것이 산더미 같았다. 웬만한 것들은 다 몰랐으니까. 그러나 참고 꾸준히 했다. 이 단계에서 가장 중요한 것은 공부법이 아니라 참을성이다. 많은 학생들이 참는 단계에서 실패한다.

"공부가 정말 이렇게 힘든 거라면 나는 도저히 못 할 것 같다"라는 말이 이때 나오게 된다.

그래도 참아라. 당장은 괴롭겠지만 그 기간은 절대 오래 지속되지 않는다. 계속 공부를 하다 보면 신기하게도 점점 공부할 양이 줄어든다. 내가 공부해야 할 전체의 양을 보지 말라. 그러면 압박감이 느껴지고 공부가 힘들어진다. 단지 오늘, 지금 이 시간에 해야 할 부분만 의식하면 공부를 쉽게 할 수 있다.

공부한 부분을 기록하는 습관은 이 기간을 좀 더 쉽게 통과하는 데 많은 도움이 된다.(참는 단계를 지나면 찾아오는 것) 105p

숫자로만 이루어진 배열이 있을 때, 배열의 처음부터 끝까지 모두 합산하는 코드인데 3가지 방식으로 짤 수 있다.

첫째는 for문을 사용

두번째는 reduce라는 array의 메소드를 사용

세번째는 재귀함수 방식을 이용하는 것이다.

코드와 실행결과는 아래와 같다.

 

지금은 내일 pair준비하기 바빠서 자세한 설명은 생략한다.

 

 

 

 

<복사 & 붙여넣기용 소스>

 

// 1번 - for문

function arrSum1(arr) {

    let sum = 0;

    for (let i = 0; i < arr.length; i++) {

        sum += arr[i];

    }

    return sum;

}

 

// 2번 - reduce 활용

function arrSum2(arr) {

    return arr.reduce((acc, cur) => acc + cur);

}

 

// 3번 - 재귀함수

function arrSum3(arr) {

    if (arr.length === 0) {

        return 0;

    }

    return arr.shift() + arrSum3(arr)

}

 

 

let arr = [ 1, 2, 3, 4, 5, 6 ]

 

// 각 함수의 실행결과

arrSum1(arr) // 1번 for문

arrSum2(arr) // 2번 reduce활용

arrSum3(arr) // 3번 재귀함수

 

변수를 선언한다는 것은 컴퓨터 저장소(메모리)에 변수를 위한 자리를 만들라고 명령하는 것과 같다.

그리고 할당하는 것은 그 자리에 값을 집어넣는 것이다.

 

let item = '노트북'

 

이 구문은 item이라는 변수의 자리를 저장소에 만들고, 거기에 '노트북'이라는 데이터를 집어넣는다는 의미이다.

 

변수를 선언할 때는 몇가지 주의할 것이 있다.

변수 선언에 사용되는 키워드는 var, let, const가 있다.

먼저 var와 let의 차이부터 알아본다.

 

scope란 변수가 관할하게 되는 지역을 말한다.

let은 자기가 속한 지역에서 적절히 scope를 가진다.('적절히'라고 표현한 것은 상황에 따라 scope가 좁아지기도 하기 때문. 앞서 scope 글에서 본 바와 같이.)

그런데 var는 전역변수로 선언이 된다.

 

그럼 무조건 전역변수로 선언되는 var를 사용하면 편하지 않을까 생각될수도 있지만, 개발을 하면서 모듈을 끌어와서 써야 할 많은 경우가 생길텐데 그 때 해당 모듈 내에 이미 선언되어 있는 같은 이름의 변수와 겹쳐 문제가 될 수 있다.

var는 중복 선언으로 인한 에러 메시지도 내지 않기 때문에 문제가 생겨도 어디서 생겼는지 알아차리기 어렵다.

 

그런 이유로 let을 사용한다. let은 var와 달리 적절하게 전역 지역 scope를 갖게 되며, 혹시 같은 scope안에서 중복선언되면 에러 메시지를 출력하기 때문이다. 그래서 var보다 안정적이다. 훨씬.

 

 

+ Recent posts