console.log(`count: ${count}, preIncrement: ${preIncrement}`) // count: 2, preIncrement: 2
i++
하는 경우가 대표적. 하지만 현업에서는 버그 발생 가능성 때문에 잘 안 씀. 개념은 꼭 알고가야한다.Side Effect란?
두 개의 정수를 받아서 곱한 결과값을 리턴하는 multiplier(a:Int, b:Int) -> Int 라는 함수가 있는데, 이 함수 내부에서 계산 기록을 로그로 남긴다거나, 네트워크에 전송한다면 이런 작업들은 side effect 인 거죠.
출처:https://www.inflearn.com/questions/12660
학습 내용
max_num = 0
for num in array: // array의 길이만큼 아래 연산 실행 (반복문 = for문)
for compare_nuim in array: // array의 길이만큼 아래 연산 실행
if num < compare_num: // 비교 연산(if문) 1회 실행
break
else:
return max_num
Big-O : 빅오 표기법, 최악의 성능이 나올 때 어느정도의 연산량이 걸릴 것인지
O(1)_상수만큼의 시간
O(N)_N만큼의 시간
O(N^2)_N^2만큼의 시간
Big-Ω : 빅 오메가 표기법, 최선의 성능이 나올 때 어느정도의 연산량이 걸릴 것인지
Ω(1)_상수만큼의 시간
Ω(N)_N만큼의 시간
Ω(N^2)_N^2만큼의 시간
꼭 기억해야 할 것
1. 입력값에 비례해서 얼마나 늘어날지 파악하기. (1? N? N^2?)
2. 공간 복잡도 보단 시간 복잡도를 더 줄이기 위해 노력하기
3. 최악의 경우에 시간이 얼마나 소요될지(빅오 표기법)에 대해 고민하기.
ㄴ 앞으로 알고리즘의 시간 복잡도는 전부 빅오 표기법. Y = wx+b << 상수 계수는 의미가 없다.
학습 내용
alphabet[1] ==> 'b' 처럼 곧 바로 원소에 즉시 접근 가능.
연결고리 == 포인터, 각 데이터의 칸 == 노드
alphabet[1] ==> 'b' 처럼 곧 바로 원소에 즉시 접근 가능.
이처럼 원소의 순서는 0부터 시작하고, 이를 인덱스라고 부른다.
특징
A. Python의 배열은 List인가요, Array인가요?
Q. Python의 List는 Array로 구현되어 있다.
Array가 List를 포함하고 있음
A. .append() 메소드를 쓰면, 새로운 배열(Araay)을 생성해서 안 좋은 것 아닌가요?
Q. 내부적으로 동적 배열이라는 것을 사용해서, 배열의 길이가 늘어나도 O(1)의 시간 복잡도가 걸린다.
*Python의 배열(Array)는 List로도 쓸 수 있고, 배열 그 자체(Array)로도 쓸 수 있다. 이는 매우 효율적인 자료구조다.
Client => request (요청)
server => response (응답)
Client와 Server는 URL로 소통한다.
Server == Computer (Internet에 연결된 상태에서)
127.0.0.1 == Localhost == 내 컴퓨터
프레임워크 = 순수 개발에만 몰입할 수 있게 도와주는 도구
Route란?
- 경로, 길
Port란?
- 서버로 들어갈 수 있는 고유번호
def == definition (정의)
render
- v. (만들어)주다
GET
- parameter(매개변수)노출
POST
- parameter(매개변수) 노출 X
DB 통신은 POST나 Petch로 통싱할 것. GET은 데이터 유출로 인하여 사용하면 안된다.
app.py를 실행했을 때, Running on http://127.0.0.1:5000 은 왜 뜨는지 알겠어!
그렇다면 그 아래에 떠있는 주소 는 뭐지?
이에 대해 제가 검색하고 약간의 실험(?)을 하여 이해한 바로는... 인터넷 연결 주소인 것 같습니다!
그러니까 127.0.0.1 은 나의 컴퓨터 자체 주소 (내 컴퓨터, 이를 루프백 IP주소라고 하더군요)이며,
그 아래에 뜬 192.~.~.~ 은 나의 컴퓨터(클라이언트) -> 인터넷(브라우저) -> 나의 컴퓨터(서버) 라는 여정을 통해!!
인터넷을 들어갈 때 받은 나의 인터넷 ip 주소 인 것 같습니다. (좀 더 정확하게는 라우터를 통하고 어쩌고 저쩌고의 여정을.. 중요하지 않으니 넘어갑시다)
이는 인터넷에 "내 아이피" 를 치거나,
"윈도우 설정 -> 네트워크 및 인터넷 -> 이더넷(Wi-Fi) 속성 -> 아래쪽 속성 부분의 IPv4" 부분을 보셔서 확인 할 수 있습니다.
혹은! " 윈도우 + R " 을 눌러 실행창을 킵니다 -> cmd 를 적고 확인 -> 명령프롬프트가 뜨면 ipconfig 입력 후 엔터! -> 그럼 본인이 사용하고 있는 네트워크 목록이 나오는데 거기서 IPv4 주소를 확인 할 수도 있습니다!
맥에서는 터미널에서 ipconfig가 아닌 ifconfig로 확인 또는 설정 -> 네트워크 -> 와이파이 또는 이더넷 -> 세부사항 에서 확인 가능 하다고합니다! (이정익님 감사해용)
조금 더 설명을 추가하면, 루프백 IP주소는 "현재 내가 사용하고 있는 장치 자체의 주소" 로 생각하면 될 것 같습니다.
즉, 나 자신 을 가리키는 IP라고 생각됩니다. (제발 맞다고 해줘)
또, 검색을 하다 보니 알게 됐는데
우리의 app.py 에 마지막 코드는 다들 app.run('0.0.0.0', port=5000, debug=True) 로 되어있으리라 생각됩니다.
이 때, 0.0.0.0 은 local 장치의 모든 IP를 뜻한다고 합니다. (정확히 어떤 의미인지 아시는 분은 댓글로 알려주세요!)
제 생각에 이 부분은 "브라우저로 서버에 접속할 때의 url"의 역할인 듯 합니다.
제가 위에서 나의 컴퓨터(클라이언트) -> 인터넷(브라우저) -> 나의 컴퓨터(서버) 라는 여정을 통해 나의 인터넷 ip주소 를 받게 된다고 했는데, 0.0.0.0 에 나의 인터넷 ip 주소를 넣어도 잘 작동하는 것을 알 수 있습니다.
(단, 이때는 localhost:5000 이 아닌 " 나의 인터넷 ip 주소:5000 " 을 통해 브라우저로 서버에 접속이 가능합니다)
제가 이해한 게 틀릴 수도 있으니 이 부분에 대해 정확히 아시면 댓글 남겨주시기 바랍니다!
혹은 이 누추한 글을 읽으시며 "어? 이 부분은 이게 아니라 이거 같은데?" 라는 생각이 드신 분이 있으시더라도 댓글에 남겨주시기 바랍니다..
(제발 아무 댓글이라도 좋으니 댓글 달아주세요)
어찌보면 쓸 데 없을 수도 있는 글 읽어주셔서 감사합니다..
(내 ip 확인하기 부분을 조금 추가했어요)
동기의 답변 ㅎㅎ 최고~