에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감🎃

[1일1로그 100일 완성 IT지식] 27번 '작문과 비슷한 프로그래밍'

 

 

저자는 여러 프로그래밍 언어를 소개하고, 프로그래밍을 작문과 비유한다.

글을 쓸 때 문체와 적절한 어휘 사용이 중요하듯이, 프로그램을 작성할 때도 적절한 프로그래밍 언어를(자바 파이썬 등)

사용하고 적절한 코드를 쓰는건 중요하다!

 

 

다음은 대표 언어들의 특징을 알아보자

 

C 언어 - 시스템 프로그래밍 용도로 사용되는 언어의 대표! (시스템 프로그래밍 용도의 언어 _어셈블러, 컴파일러, 텍스트 편집기 같은 프로그래머 도구와 운영체제까지 작성할 목적의 언어)

 

 

자바 - 프로그래밍을 빠르고 편하게 하기위해 개발던 언어 중 하나!원래는 속도는 그다지 중요하지 않지만 유연성이 중요한 가전 제품과 전자 기기 같은 작은 임베디드 시스템에 적용할 목적 이었다. 또한, 자바스크립트처럼 웹페이지상에서 실행할 용도로 변경되었지만 인기가 없고, 지금은 웹 서버에 널리 사용되고있다.(JAVA -spring)

 

자바스크립트 - 처음부터 웹페이지의 동적인 효과를 구현하기 위해 브라우저 내부에서 사용할 목적으로 설계되었고, 현재 거의 모든 웹페이즈는 자바스크립트 코드를 어느 정도 포함하고있다!자바스크립트는 언어 자체가 단순해 만들기 쉽고 컴파일러가 모든 브라우저(ex. Chrome)에 내장되어 있어 콘솔창에 바로 실행 할 수 있다.

 

파이썬

 - 가독성에 초점을 두고 설계되었다. 파이썬은 배우기 쉽고, 쉽고 간결한 문법으로 생산성이 높아 개발도 빠르다.

다른 언어나 라이브러리에 쉽게 접근 & 연동할 수 있어 확장성도 높고 , 이미 수많은 생태계와 커뮤니티가 형성되어 있어 라이브러리가 미친듯이 많다. 다양한 장점으로 저자도 언어를 하나만 꼽자면 파이썬을 꼽았을 정도다!

 

 

 

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감🎠

[1일1로그 100일 완성 IT지식] 26번 '고수준 언어에서 프로그램 실행까지'

 

 

어제 자 주제랑 비슷해서 어떻게 정리할까~ 고민했는데 한번 복습하는게 좋을것 같당.

또, 저자가 뒤에 얘기하는 프로그래밍 언어 포트란/ 코볼/ 베이직 은 스킵하는게 제 독후감에 더 목적적합한것 같당.

 

일전에 내용처럼 옛날 프로그래머들은 0과 1을 컴퓨터에 직접 입력을 해주어야했습니다.

그러다가 어셈블리어와 어셈블러가 나오면서 프로그래밍 효율성이 폭발적으로 증가했고!

고수준 프로그래밍 언어가 나오면서 프로그래밍은 다시한번 폭발적인 성장을 거쳤습니다!

(그 당시는 포트란 같은 언어가 나온건데 쉽게 파이썬이라고 생각하자!)

어셈블리어를 사용하다가 파이썬을 쓰니 당연히 프로그래밍 하기 쉬워졌고 효율성도 엄청나게 올라갔습니다~

배우기 쉽고 쓰기 쉬울뿐 아니라 고수준 프로그래밍 언어는 에러를 발견하고 고치기 쉽습니다.

파이썬 언어를 0과1로 변환하는 컴파일 과정에서 컴퓨터가 명백한 에러를 미리 점검해줍니다! (철자 오류, 괄호 불일치 등의 구문 오류, undefined 변수의 연산 등등)

 

또한, 자바스크립트 자바 등등 세계적으로 유명한 고수준 프로그래밍 언어들은 계속 발전되고 업데이트되어 더욱 쓰기 쉽고 용이하게 되니 개발자인 저희들 입장에서는 너무너무 개이득입니다!

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감🎁

[1일1로그 100일 완성 IT지식] 24번 '알고리즘은 이상, 프로그래밍은 현실'

 

 

알고리즘은 추상적이고, 이상적입니다. 

밑의 라면을 끓이는 알고리즘을 보시면 간단하게 표현한 만큼 추상적이고, 자세한 예외처리를 해주지 않아 이상적입니다.

(예를들어, 중간에 물이 끓는데 가스가 없어서 불이 안나오면 물은 끓지 않습니다!)

 

그에비해 프로그래밍 (프로그램을 만드는것 ) 은 아주 상세하고 실질적으로 명령어들을 입력해야합니다.

 

이때 프로그래밍을 0과 1로 해주기는 너무 힘드니까 이용하는것이 다양한 프로그래밍 언어입니다.

 


[1일1로그 100일 완성 IT지식] 25번 '다른 프로그램을 처리하기 위한 프로그램'

 

 

저자가 설명한 어셈블러로 들어가기전에 위의 프로그래밍 언어를 보자.프로그래밍 언어가 없으면 0과 1로 컴퓨터와 소통해야한다.

 

아래는 영화 '이미테이션게임' 에서 나오는 최초의 컴퓨터인데,Java나 JavaScript 같은 프로그래밍 언어가 존재하지 않던 시절.. 컴퓨터에 0과 1을 직접 입력해주었다.당연히 마우스나 키보드도 없으니 사진 안의 동그라미 하나하나가 메모리 적재 장소인데 열어서 안에 뭘 넣어주면 1이고 아무것도 안 넣어주면 0 이런식으로 구동이 되었다..

 

그래서 발전이 된 것이 어셈블리어와 어셈블러이다.

자바스크립트가 컴파일러를 통해 0과 1로 변환되듯이, (0과 1로 바로 변환은 안되고 어셈블리어로 변환이 된 뒤 0과 1로 변환되는 과정을 거치는데 이번 챕터의 범위를 벗어나는 듯 하니 0과 1로 변환된다고 하겠습니다:) )

어셈블리어가 어셈블러를 통해 0과 1로 변환된다.

당연히 우리는 자바나 자바스크립트 같은 훨씬 좋은 언어를 사용해서 느낌은 안오지만, 그 당시에는 획기적인 방법이 나온거고 이거 만든 사람은 그들만의 세계의 노벨상인 튜링상을 수상했다고 한다.

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감👶

[1일1로그 100일 완성 IT지식] 22번 '10개 도시를 최단거리로 여행하는 법'

 

 

내용이 모호하고 어렵다.. 그렇다고 또 그렇게 중요한것 같지도 않아서 짧게 정리하려고 한다! ㅎㅎ

 

알고리즘의 복잡도를 잠깐 언급하는데 크게 시간 복잡도와 공간 복잡도로 나뉜다.

 

1. 시간 복잡도  (어제자 그래프 느낌)

 -특정한 크기 입력(n) 에 알고리즘이 얼마나 오래 걸리는지.

 -알고리즘에 필요한 연산 횟수

2. 공간 복잡도

 -특정한 크기 입력(n)에 대해 알고리즘이 얼마나 많은 메모리를 차지하는지.

 -알고리즘에 필요한 메모리의 양

 

또 다항이다 비결정적 다항이다해서 P(합리적인 시간안에 푸는 문제) NP의 개념을 사용하시는데 이건 넘어가고 ㅎㅎ

 


오늘 Title인 여행하는 외판원 문제!

옛날에 한번씩 해본 모든 곳을 한번씩만 찍고와야되는데 최단거리로 찍고오는 문제다.

 

 

외판원 뿐만 아니라 통학 버스나 쓰레기차가 쓰레기를 수거 할 때도 최단거리를 한번씩 도는건 중요하니 요런게 생각보다

그들만의 세계에선 유명한 문제였다.

 

'휴리스틱' 이라는 내가 있는곳에서 가장 가까운 곳으로! 이동을 반복해서 처음 출발했던 곳으로 돌아오는 방법이 현실적으로 정답에 가까운 해결책이라고 한다.

 

방법이야 많지만 아직까진 결국 모든 경우의 수를 다~ 돌아봐야 최단거리를 구할 수 있다고한다.

(이런 류의 문제의 경우의 수 공식은 (n-1)!/2 로 저 외판원은 모든 경로 약 18만 개를 다 다녀봐야 가장 짧은 길을 구할 수 있다..) 

 

물론 현실적으로는 '휴리스틱' 방법처럼 대충~ 가겠지만 알고리즘에서는 컴퓨터의 모든 경우의 수를 생각해야되니까 똑똑한 사람들은 이것저것 고려를 하나보다.

 

 

 

 

 

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감👻

[1일1로그 100일 완성 IT지식] 20번 '10억 개 전화번호에서 이름찾기: 이진검색'

 

 

지금은 사라져버린 두꺼운 전화번호부 책을 생각해봅시다~

그곳에서 '엄준식' 이라는 이름을 찾아보면!

 

우린 엄준식을 찾으려고 1페이지부터 찾지는 않을거다. 중간쯤 펴서 첫글자가 '엄' 보다 앞에있으면(ex. '신준식' 이라면) 적당히 뒤쪽을 찾아볼거고 '엄'보다 뒤에있으면(ex. '정준식' 이라면) 적당히 앞쪽을 찾아볼꺼다.

 

이 행동을 여러번 해서 결국 엄준식을 찾는게 이진 방법이다.


[1일1로그 100일 완성 IT지식] 21번 '검색을 쉽게 만드는 선택 정렬 vs 퀵 정렬'

 

 

하지만 현실은 녹록치 않은법.. 전화번호부처럼 모든 데이터가 이름 순으로 정렬되어 있지는 않다ㅠ

정렬은 크게 선택 정렬과 퀵 정렬이 있다.

 

선택 정렬

위 그림같이 데이터 하나하나 비교해 가장 작은수를 앞으로 보내주는 방법이다.

요 방법은 데이터의 갯수가 n개라고 할때 n(n+1)/2 번 반복해야 모든 데이터가 정렬된다.

따라서, 위 그림은 6(6+1)/2 => 21번의 반복후에 모든 데이터가 정렬이된다. 

데이터의 수가 많아질 수록 반복행동이 엄청나게 많아지는 단점이 있다.

 

퀵 정렬

아래와 같이 처음에 소개한 이진정렬 느낌으로 정렬한다.

데이터 중 가운데수로 정렬할 데이터들을 2등분한다. 2등분 한 각각의 데이터들을 가운데수로 도 2등분한다.

이를 반복해 각각의 데이터가 0 or 1개가 될때까지 반복해 오름차순으로 만들어준다.

 

이는 데이터의 개수가 n개일때 nlogn (밑수가 2인 log) 번 반복하면 정렬이 완료된다.

아래 그림처럼 데이터의 개수가 커지면 선택 정렬(대충 n제곱)보다 압도적으로 적은 반복으로 정렬을 완료시킬 수 있다.

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감🐈

[1일1로그 100일 완성 IT지식] 18번 '알고리즘과 초콜릿 케이크 레시피'



사실 초콜릿 케이크 레시피는 저자의 어그로 제목이다.

알고리즘은 데이터를 명시하고(선언) 수행할 작업을 자세히 설명하고 결과값을 도출하는데, 

 

계란을 '반숙'으로 구우려면 반숙의 정의부터 불 세기와 몇 분동안 구울지를 명확히 제시하지는 않으니까

잠깐 생각해봐도 ,(쉼표) 나 ;(세미콜론) 하나만 달라져도 에러를 띄워버리는 알고리즘과 유사하지는 않아보인다.

 

그래서 알고리즘은 이렇다~ 설명하고 19번 '반에서 가장 키 큰 사람 찾기: 선형 알고리즘'으로 넘어간다.

  • 알고리즘은 모든 가능한 상황을 다루어야 한다.
  • 알고리즘은 결국 멈춰야 한다. (for 문에서 i 값을 0~10 까지 정해주듯이)

[1일1로그 100일 완성 IT지식] 19번 '반에서 가장 키 큰 사람 찾기'

 

 

우리는 반에서 가장 키 큰 사람은 그냥 둘러보면 알 수 있다.

하지만 알고리즘은 아주 명확하고 상세하게 설명해야 답을 구할 수 있다.

 

기본적으로는 한 명 한명 키가 몇인지 묻고, 지금까지 확인한 사람 중에 가장 키 큰 사람이 누군지 계속 체크하는 것이다.

이런식으로 모든 사람의 키를 물어보면 '가장 키 큰 사람과 그 사람의 키'를 알 수있다.

 

그런데 키가 같은 사람이 있으면 어떨까? 또, 추가로 모든 사람의 키 평균을 구하려면?

 

키가 같은 사람이 가장 클 수도 있으니 키가 같은 사람 모두의 이름을 기억하고 있어야한다. 또 키 평균을 구하려고 보니까 사람이 아무도 없으면 알고리즘은 0으로 나눠버릴거다. 

 

이러한 모든 상황을 명확히 컴퓨터에게 알려줘야한다. 위의 상황은 저자가 '자료 구조' 장에서 자세하게 다룬다고하니 요정도로 넘어가겠습니다~ 

에고 밀려서 쓰는.. WIL! ㅎㅎ

[주특기 입문] 주차였는데 뭔가 매니저님들이나 다른 분들이 엄~청 겁줘서 걱정반 기대반으로 시작했지만~ 

생각보다 별거 없었당

기존에 했던대로 팀과제 조금씩 하고 나머진 본인 공부시간! 

물론 개인과제인 버킷리스트 만들기가 있었는데, 코딩애플 코딩애플 (Coding apple) 선생님 강의를 미리 수강해놔서 수월하게 해결했다. 역시 이러니 저러니해도 공부는 본인이 하는거다. 같은 공부시간을 가지고 비슷한 조건으로 공부했지만 얻어가는건 저마다 차이가 있었고, 나도 다른거 제쳐두고 내 공부에 집중했던거 같다.

 

어렴풋이 눈치는 챘는데 이번주차에 확실히 느꼈던게 항해99에는 여타 함정이 존재한다..

우선, 시스템.  스파르타에서도 1~7기에 거쳐 여러가지 시도해보고 걔중에 더 많이 끌고 갈 수 있는 시스템을 선택했다고 생각한다. 당연히 그게 옳다.

하지만, 사람이 많으니 당연히 모두에게 맞춤이 될 수는 없다. 팀과제/ CS스터디/ 개인과제/ 개인학습자료/ 지급된 강의들/항해톡/종종 열리는 세션강의/매니저님의 순회 등등 일정이 적지 않은데, 항해의 시스템에 너무 많은 비중을 두고간다면  제 공부할 시간이 압도적으로 적어질거다. 모든것을 따라가기보다는 내게 도움이 되는 것을 취할 필요가 있다고 생각한다.

 

두번째, 강의. 첫번째 느낌과 비슷한데 사람마다 맞는 강사는 있다고 생각한다. '나도 누군가에겐 OOO 일 수도 있다'는 명언처럼.. 우선 지급되어 버린 강의에 눈을 뺏겨 다른 강의를 찾아볼 생각을 하지 못한다면 불필요한 시간이 더 들 수도 있다고 생각된다.

 

세번째, 우리 커여운 동기들. 사실 3가지 다 내용은 일관된다. 모두의 실력이 제각각이고 실력 증가의 폭도 제각각이다. 

남들의 화려한(?) 실력에 마음이 급해져 황새를 좇아간다면 그거야말로 시간이 뭉텅이로 날라간다고 생각한다.

 

뭐 이런거 다~ 감안하고도 항해99는 압도적으로 좋은 시스템이라고 생각한다. 우선 개인이 하기힘든(거의 할 수 없는..)

몰입을 99일이나 할 수 있다는점 하나만으로도 지인 10명이 물어보면 10명에게 추천할 수 있다.

몰입 뿐 아니라 함정이라고 쓰긴했지만 항해의 시스템은 굉장히 잘 굴러가있다. 내게 필요한 것을 취해서 항해 기간을 보낸다면 어느샌가 큰 보상으로 돌아올거라고 확신한다.

그리고 아직 경험해보진 못했지만 실전프로젝트, 3주차까지 지나고나니 더욱 엄청난 경험이 될 것이라는 생각이든다.

실제로 현업에서 하시던분들이 극찬하는 프로젝트니 더 말해 뭐하겠어..

 

뭐 적다보니 딱히 회고는 아닌거 같은데.. 모르겠고ㅎㅎ WIL 키워드 준거 적고 마치겠음!

State, Props, 리렌더링 발생 조건

대표적인 3가지 리렌더링 조건

  1. Props 변경 (=> properties의 줄임말)
  2. State 변경
  3. 부모 컴포넌트 렌더링

1. Props 변경

Props 업데이트가 일어나면 리렌더링을 한다.

Props가 변경되는 건 부모 컴포넌트의 State도 변경이 일어난다는 의미이다.

 

부모 컴포넌트의 State 변경이 발생하면 Props도 업데이트되고,

모든 하위 컴포넌트에 대해 리렌더링이 발생한다.

 

2. State 변경

State 업데이트가 일어나면 리렌더링을 한다.

 

리액트에서 State 값이 변경되면 관련 컴포넌트들을 전부 리렌더링 한다.

리액트는 변화를 바로바로 감지하여 화면에 변경사항을 보여주기 때문이다.

 

3. 부모 컴포넌트 렌더링

부모 컴포넌트가 렌더링을 하면 그 자식 컴포넌트들은 모두 리렌더링 한다.

Props와 같은 원리이다.

 

 

결론

리렌더링 조건을 생각하며 로직을 최적화하자.

 

출처: https://tooo1.tistory.com/580 [개발자 퉁이리:티스토리]

에게해 스터디원들과 함께하는 CS 간단 발표 및 독후감🐈

[1일1로그 100일 완성 IT지식] 16번 '슈퍼컴퓨터부터 사물인터넷까지'

'컴퓨터' 라고 하면 노트북이나 데스크톱 컴퓨터가 떠오르는데, 생각보다 컴퓨터라고 부를만한 친구들이 많습니다. 

휴대전화와 태블릿pc라든지 네트워크로 연결된 가전제품 등 (이른바 사물인터넷) 슈퍼컴퓨터에 이르기까지 다양합니다.

 

가격, 크기, 생김새는 제각각 이지만, '컴퓨터'의 논리적 구조인 무슨일을 하는지 (무엇을 계산할 수 있는지)의 공통적 특성을 가지고있습니다.

 

다음은 저자가 이번 장에서 소개한 개념들을 짧게 알아봐요!

1.슈퍼컴퓨터

국가기상슈퍼컴 5호기 첫 공개…'1초에 5경2천조번 연산'

슈퍼컴퓨터는 과학기술연산을 비롯한 다양한 분야에 사용되는 고속/거대 용량 컴퓨터이다. 이 개념은 절대적 기준이 아닌 상대적인 것으로 일반적 목적의 컴퓨터에 비해 당대 최상급 처리 능력을 보유한 고성능 컴퓨터를 가리키는 말이며, 간혹 단순히 HPC라고 부르기도 한다. (출처-위키백과)

 

 

2.GPU

그래픽 처리 장치 또는 GPU는 컴퓨터 시스템에서, 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치이다. VPU라고도 한다. (출처-위키백과)

 

 ->범용 CPU보다 그래픽 관련 계산을 훨씬 빠르게 수행하는 그래픽 전용 프로세서입니다.

 

 

3.분산 컴퓨팅

분산 컴퓨팅은 분산 시스템을 연구하는 컴퓨터 과학의 한 분야로, 인터넷에 연결된 여러 컴퓨터들의 처리 능력을 이용하여 메시지를 하나에서 다른 하나로 보냄으로써 거대한 계산 문제를 해결하려는 분산처리 모델이다. (출처-위키백과)

 

 ->네트워크로 연결되어 서로 독립적으로 작동하는 여러 대의 컴퓨터입니다. 검색 엔전, 온라인 쇼핑, SNS, 클라우드 컴퓨팅 같은 대규모 웹 서비스가 분산 컴퓨터 시스템으로 이루어져 있고, 하나의 문제를 해결하기 위해 네크워크에 연결된 여러개의(~수천개) 컴퓨터가 협력하는 것입니다.

 

 

 

+ Recent posts