[자바스크립트] 기본 문법 (1)

자바스크립트를 배워보자.
Aug 29, 2024
[자바스크립트] 기본 문법 (1)
자바스크립트를 배워보자. 두근두근
 
인텔리J 를 사용해도 되고, VS code 를 사용해도 된다.
나는 VS code GO.
 
STS 쓰면 단축키가 같은 아래의 Evlipse Keymap 을 설치하고,
notion image
인텔리J 쓰면 아래의 JetBrains 설치하기.
notion image
 
다운로드는 여기서 검색해서 Install 하면 된다.
notion image

자바스크립트에서 자주 사용하게 되는 단축키

ctrl + alt + l → 정렬 alt + shift + 커서 선택 → 다중선택
 
File → Preferences → Setting 자동 정렬되게 세팅해두기
notion image
 

자바스크립트

 
File → Open Floder → 로컬 작업 환경 JSWORK 폴더 만들어서 열고,
VS code 에서 ex01 폴더 > test1.html 파일 만들기
notion image
 
실행하고 브라우저에서 F12 로 콘솔창 확인 (실행은 파일명 우클릭 > Open with Live Server)
이것이 바로 스크립트, 스크립트는 독립적으로 실행 할 수 없다.
notion image
notion image
 
브라우저 없이 실행해보고 싶을 때, 아래와 같이 test1.js 파일을 새로 만들어서 자바스크립트 코드만 넣고 터미널 열고 실행해보면 된다.
궁금하면 node.js 설치해서 해보면 됨(환경변수 설정해야됨)
notion image
notion image
 
💡
변수는 let 만 쓰자. (var X)
 
 

타입 추론

 
자바스크립트는 밑으로 내려가면서 해석-실행 된다.
notion image
let n4 = true;
들어갈 때 타입이 결정된다. 이를 타입 추론 이라고 한다.
미리 추론이 되는 게 아니라, 들어올 때 추론이 된다. 속도도 느리고, 메모리가 없으면 터지기도 한다.
 
일반 자료형은 데이터 사이즈가 있는데, (ex. c언어나 자바의 int 8; → 4byte 의 값을 받을 수 있음)
타입이 다 적혀있으니, 안전하게 사이즈를 확보한다.
c언어의 구조체나 자바의 String/Class 같은 애들은 문자가 몇 개 들어올지 알 수 없으니 사이즈 확보가 안되는 경우가 존재한다.
메모리 공간은 컴파일 시에 확보해둘 수 있어, 실행 시 엄청 빠르다.
일반 자료형은 컴파일 시에 ex. 4byte 확보 해놔야지~ 할 수 있는데, 얼마가 들어올지 모르는 경우, heap 이라는 공간을 만든다.
ex. String 이네? 얼마 들어올지 모르겠어 → 무조건 4byte 를 잡아, 주소를 가지니까. 주소를 가진 상태로 데이터 사이즈를 확보한다. (4byte 확보하고, 주소를 가지는 것(주소의 시작번지) 데이터가 아니라) 레퍼런스 자료형 변수는 객체의 메모리 주소를 저장, 실제 객체는 힙 메모리에 저장된다.
4byte 지정해두고, 저 넓은 공터의 실제 주소를 가리키게 하는 것이 → 포인터
포인터 자료형들을 레퍼런스 자료형이라 한다.
미리 사이즈를 확보할 수 있다면 레퍼런스 자료형이라 할 수 없다. (그런 의미에서 자바는 레퍼런스 자료형^^)
 
타입 추론 언어들은 전부 포인터다. 메모리 사이즈를 레퍼런스 자료형으로 다 가진다.
 
명시적으로 값이 없음을 설정하는 null.
변수가 선언되었지만 초기화되지 않은 상태, 값이 아직 할당되지 않았음은 undefined.
notion image
 
아래의 user 가 자바스크립트 객체이다. 자바스크립트의 오브젝트.
notion image
key: value 가 자바스크립트의 문법.
 

자바스크립트에서 데이터 전송하기 (→ JSON)

 
이 데이터를 전송하고 싶으면, 용량을 쓸데없이 크게 전송하지 않기 때문에 띄어쓰기를 다 빼야 한다.
일자로 다 줄여서 보낸다.
내가 다른 사람한테 전송할 거니까, 버퍼에 담는다. (버퍼는 사이즈에 다 차야 전송됨, 다 안찼을 때에는 flush() 를 해야 전송됨) → BufferedWriter
받는 사람은 → BufferedReader
자바스크립트 오브젝트 타입 (→ 바로 다른 언어에 보내면 안된다. MIME 타입에 있는 것들 중 하나로 보내야 하는데, 제일 인기있는 것이 JSON ^^)
let user={id:1,username:"ssar",password:"1234"};
버퍼에 있는 걸 읽을 때, readLine() 으로 한 줄 씩 읽는다. “\n” 이 반드시 있어야 readLine 으로 읽을 수 있는 것. (기본기)
notion image
“\n” 을 붙여서 읽었다?
→ 이게 뭐지? 라고 하지 않게 ‘Content-Type’ 을 자바스크립트 오브젝트 라고 적어 놓고,
자바 오브젝트로 바꿔서 보내줘야 한다. (자바스크립트 오브젝트는 자기가 직접 파싱 못한다. 그대로 보내면 자바가 이해 못함)
class User{int id=1;String username=”ssar”,String password=”1234” + “\n”}
데이터를 타 시스템으로 전송할 때는(HTTP 통신에서), MIME 타입에 있는 걸로 전송하라는 국제적 표준이 있다.(x-www-form url 처럼~)
이건 통신을 위한 데이터 타입이라 됨, 이런 데이터로 보내주어야 한다.
id=1&username=ssar&password=1234
 

JSON (JavaScript Object Notation)

 
지금 국제적 표준이 JSON. 자바스크립트랑 비슷하게 만든 표기법으로, 텍스트 기반의 데이터 포맷이다. 통신은 자기 오브젝트가 아니라 JSON 형식으로 변환한 후 전송해야 한다.
{"id":1,"username":ssar",password":1234}
 
. 을 통해서 객체의 메서드나 필드를 찾을 수 있다. 문자열은 이렇게 접근이 안된다.(당근)
notion image
 
자바는 new int [50] 하면 50개의 공간이 필요하다, 하고 배열에 확보해 놓고 시작하는 반면,
notion image
추론형은 다르다.
notion image
let arr = [1, 2, 3];
 
또한 자바는 늘어나지 않는다. 처음부터 사이즈를 확보해 놓고 쓰기 때문.
배열은 연속된 공간을 확보에서 굉장히 빠르게 찾는 게 목적이거든.
But 자바스크립트는 남는 공간에 슥슥 막 넣을 수 있음. 찾아 갈 때는 현재 주소가 다음 번지 주소를 꼭 알고 있어야 한다. 쓰기는 참 쉽다.
 
notion image
 
let arr = [1, 2, 3]; console.log("배열", arr); console.log("배열", arr[0]); console.log("배열", arr[1]); console.log("배열", arr[2]);
arr 하면 값을 시작번지부터 끝까지 쫙 읽음 → 123 출력
 

함수 function()

 
리턴 타입이 필요가 없다.
리턴 하고싶으면 넣고 안하고싶으면 안넣어도 된다.
notion image
 
클래스 안에는 메서드라 불리는 것이 존재하고(상태를 변경시키니까),
감싸는 오브젝트가 없으면 함수라고 부른다. 독립적으로 실행되는 코드 덩어리는 → 함수
notion image
 
자바에서는 무조건 클래스 안에 넣어야 한다.
자바에서 메서드는 매개변수로 전달이 안된다. 함수 타입은 매개변수로 받을 수 없다.
자바는 전달 받을 수 있는게 기본자료형, 클래스 타입밖에 없음, 자바는 1급 객체가 오브젝트 밖에 없음
모든 프로그램언어는 1급 객체를 가지는데, 1급 객체는 메서드의 파라미터로 전달할 수 있다.
메서드는 1급 객체가 아니다.
자바는 1급 객체가 클래스 밖에 없기 때문에, 클래스로 전부 감싸서 넘겨야 한다.
class Hello { void go(A t) { } } class A { void out() { } }
 
하지만 자바스크립트는 다르다. 자바스크립트는 모든 게 1급 객체다. = 모든 타입을 전달 할 수 있다. = function 도 전달 할 수 있다.
notion image
자바는 함수를 담을 수 없지만, 자바 스크립트는 이것이 가능하다.
 
아래는 익명함수.
1급 객체는 변수에 담을 수 있다.
→ 함수를 담을 수 있다.
notion image
 

람다식 / 람다 표현식 (같은 의미)

 
람다식은 함수형 프로그래밍에서 사용되는 익명 함수(Anonymous Function)를 나타내는 표현식이다.
 
f1은 표현식 expression 이 아니다. (삼항연산자 → expression)
f1() 는 실행만 되고, 대입되는 게 아님
notion image
이렇게 하면 표현식이라 할 수 있음. (표현식은 반드시 어떤 값을 생성한다)
notion image
 
람다식은 expression이다. 리턴이 되어야 한다. 이건 람다 표현식이라 한다.
notion image
 
내부가 실행만 되면, 람다식
리턴이 되면 람다 표현식
notion image
 
람다 표현식
notion image
호출할 때에는 f1, f2 로 호출하면 됨
notion image
 
어떤 메서드에 매개변수의 함수를 전달하고 싶잖아,
() ⇒ 1; 를 전달하면 짧잖아~ 가독성도 좋고~
람다는 간결하다. 길게 적지 않아도 되고.
문법 정도는 알고 있어야 한다.
 
 

 
언어 공부 할 때는
  1. 메모리 관리 해주는 것인지 (GC 처럼)
  1. 멀티스레드/단일스레드 기반인지
  1. 인터프리터 언어인지/컴파일 언어인지 구분
  1. 1급 객체가 뭔지 확인
 
얘가 static 이 어딨어, main 이 없는데^^ 처음 공부했던 language 에 대한 파악이 있어야 한다. 비교하면서 공부하면 빠름.
 
Share article

eunmouse