Javascript 기초

아기코딩단2·2022년 3월 30일
0

프로그램을 다룰 때는 데이터와 로직밖에 없다. 데이터를 다룰 때는 변수를 사용하고 로직을 다룰 때는 제어문과 반복문 그리고 연산자를 사용한다.
Strict 타입의 언어는 JAVA 이고, JS,Python은 약한 타입의 언어이다.
무엇을 보고 JAVA가 엄격한 언어임을 알 수 있는가? 자바가 처음 나오는 변수의 타입을 꼭 정해주는 것을 보고 알 수 있다.
JAVA에서 int라고 써주는 이유는 메모리에 값을 할당해줘야하기 때문이다.
옛날에는 컴퓨터의 성능이 제한되어 있기때문에 타입을 만들어줬다. int의 경우 4바이트
int num = 10;을 보자면 1. 새로운 메모리 공간을 할당해라. 2. 들어가는 데이터의 종류를 결정해라.
즉 메모리 공간 할당과 데이터 종류의 결정이라고 볼 수 있다.

script 언어는 어떤 플랫폼에 대해 쓰기 위해서(js 의 경우 브라우저)등장했다.
js 는 들여쓰기만으로 범위를 볼 수있다.

JAVA에 대해 심층적으로 보자면
우리가 생각해볼 때 데이터는 하나로 구성되어 있는 경우가 없다. 예를 들자면 전화번호. 즉 전화번호 하나가 정보를 가지고 있는 것이 아니라 누구의 전화번호인지와 같은 정보를 가지고 있다.
즉 이러한 여러가지고 구성되어있는 데이터를 묶기 위해서 배열, 구조체, 클래스이다. 자스에서는 객체리터럴? 이러한 데이터의 경우 여러가지 정보가 얽혀있을 수 있으니 크기가 무거울 수 있다. 그래서 어떤 공간에 데이터를 저장해두고 계속해서 참조만 해서 들고 오는 것이 효율적이다. 계속해서 큰 데이터 자체를 들고오기에는 비효율적이기 때문 그래서 이 데이터에 주소값을 부여하고 그 주소값을 참조하는 것이 효율적이다. 이렇게 해서 등장하게 된 것이 참조형 변수이다. 영어로는 레퍼런스( 참조라는 뜻) 이렇게 간접적으로 넣는 것을 레퍼런싱한다고 한다.

프로그램은 복잡성을 제거하는 방식이다.
항상 이걸 왜 사용할까 라는 생각을하자.
js도 GC(가비지 컬렉터)가 존재한다.
연산하면 값이 나온다라는 것만 기억하면 된다. ****
즉 if(조건식)으로 변수를 잡을 수 있다는 것이다.

프로그램을 짤 때 나에게 주어진 데이터가 무엇인지 아는 것이 중요하다 .
뭔가 데이터를 처음에 데이터를 쭉 선언해놓는 것이 요리를 하는 것과 비슷하다. 뭐랄까 요리에 사용될 재료를 나열하는 것과 비슷하다.
자바의 경우 변수를 선언하면 SAVE 해놓거나 바로 사용해야한다.

상자에 값이 들어가는 경우(기본형)와 주소(예를 들자면 해당값의 리모컨)가 들어가는 경우가 있다.
cpu의 기본 연산단위가 4바이트라서 자바에서는 기본 처리 데이터가 4바이트이다.
배열을 선언했을 때 이 배열의 변수값을 출력해보면 주소값을 내보내는데 이는 메모리상의 주소가 아니라 JVM의 주소값이 나오게 된다.

즉 리모컨을 사용한다는 것이다. 참조변수(래퍼런싱)이다. 왜냐하면 배열의 경우 하나하나의 데이터는 의미가 없는 경우가 많고 모여서 의미를 가지는 경우가 많기 때문이다. 데이터의 값이 커지는 경우이다.

jump의 개념 jump할 때는 . 또는 []을 사용한다. [0]은 0번째로 jump하라는 뜻이다.
0이라는 것은 연산의 개념이다.

배열을 사용할 때 어떤 것을 배열로 처리할 것이냐를 생각하자
JAVA의 경우 같은 종류의 데이터를 배열로 처리한다.
JS의 배열은 자유롭기 때문에
배열을 선언할 때 비정형적인 데이터를 쓸 때 사용한다. 비정형데이터란 서로 상관관계가 없는 데이터를 말한다.(반에서 가장 큰 키 구하기 이 데이터는 하나하나의 데이터는 의미가 없다.) 즉 비정형적이고 반복처리가 필요한 경우 배열로 잡는다. (성적의 평균구하기 와 같은 경우)

배열을 쓰는 경우를 정리하자면 각각의 데이터로써는 큰 의미가 없지만 모여있을 때 하나의 의미가 될 때 사용하면 좋다. 즉 비정형적이고 반복처리가 필요한 경우이다.(반복횟수를 알고 있을 때)

자바와 자스의 배열의 차이
JS - 길이가 가변, 기능이 많음, 어떤 종류의 데이터든지 상관없음, Js를 다양한 자료구조가 업슴
JAVA - 길이가 고정, 기능이 한정적, 타입이 고정된다, JAVA list 와 같은 자료구조가 많다.

제이쿼리는 Js호환성을 맞춰주기 위해서 사용한다.
JS는 배열 만들어 줄 때 []사용한다.
배열에 접근할때 곱하기 하면서 올라가기 때문에 01234이렇게 올라간다. 내가 이해하는 바로는
@@@@@@@@@ int arr = [1,2,3,4]일 때 인덱스 각각마다 4바이트를 가지는데 곱하기하면 이상한디...?@@@@@@@@@@@@

항상 흐름만 잘잡으면 된다.

for 문은 카운티드 루프
while 문은 언 카운티드 루프

배열에서 다차원 배열을 다루는데 잘할 필요는 없지만
객체라는 것을 이해하기 위해서 필요하다.
배열에 직접적인 값이 들어갈 수 있고 래퍼런스(참조)값을 넣을 수도 있음

js에서는 everthing is object라고 말함
JAVA에서는 instance라고 부르는데 엄밀히 말하면 다르다
가변객체 <->불변객체(immatable)

java에서 new 연산자는 메모리 공간을 할당해준다.
JAVA에서 기본배열은 한계가 있지만 자스에서는 왜 자유롭게 가능한가? 에 대해서 생각해보면 자스의 배열은 기차칸이 서로 연결되는 것과 비슷하다. 즉 배열에서 서로 연결되어있다. linked list 라고 말한다.

자스의 객체는 키와 값으로 구성되어있는데 각자의 키가 값을 가리키고 있다. 그리고 키를 이용해서 새로운 값을 줄 수도 있다.
행열 데이터를 처리하기 위해 다차원 배열을 사용한다. 2차원 배열의 가장 간단한 것은 달력이다.
다차원 배열의 메모리 상의 구조는 배열안에 있는 배열이다.

다차원 배열을 진짜 공부하는 이유는 처음으로 만나는 구조화된 데이터이기 때문이다.
다차원 배열을 보는법은 arr = [[1,2][3,4]]
배열안의 리모컨이 배열을 가리킨다.
arr의 1번째의 1번째~여기에서도 jump의 개념이 사용된다.
약간 뭐하면 뭐하고~ 식의 심리테스트와 비슷하다.

참조형 변수에서만 nullpointerException이라는 오류가 뜨는데 이는 리모컨의 기능이 비어져있다라는 것이다. .이나 [] 에서만 등장한다.

유지해야하는 데이터는 바깥쪽으로 빼줘라 즉 데이터가 계속 유지해야하는가에 대한 생각
데이터를 다루기 위해서는 구조화된 정보를 다루는 방법을 알면된다.
자스의 객체 리터럴이다. 이것은 자바의 클래스와 인스턴스와 비슷하다.

데이터 - 여러데이터가 뭉쳐서 하나의 의미가 생기는 것이다. 이들의 특징을 보자면 엑셀과 같이 도표로 정리가 된다.

자바는 타입을 따지기 때문에 다양한 데이터를 넣어주려면 새로운 데이터 타입이 필요하기 때문에 클래스를 생성하게 된다. 그래서 클래스를 만들 때는 왜 만들어야하는지에 대한 생각을 해야한다. 자바에서는 클래스의 의미는 사용자가 정의하는 새로운 타입이다. 그리고 이 클래스를 사용하고 싶을 때는 new를 통해 메모리 공간을 할당해주면 된다.
자바에서 클래스를 사용하는 방법은 다차원 배열을 사용하는 것과 아주 똑같다. 그러나 대신에 꺾쇠 대신에 .을 사용한다.
정리하자면 클래스는 사용자가 정의하는 새로운 타입이다.(이말 뜻은 내가 메모리 구조를 잡을 수 있다는 뜻)항상 논리적으로 생각하도록 노력하자

객체리터럴이 제이슨의 원형.

profile
레거시 학살자

0개의 댓글