공부/오늘 배운것

22.09.28.Wed - 컴퓨터 과학의 필요성

Doil98 2022. 9. 28. 17:53

22.09.28.Wed - 컴퓨터 과학의 필요성

오늘의 요약 = 배열의 종류 호출 심화,변수의 정체,메모리의 구조,구역할당,변수와의 관계

1.

복습

for문

     /* 
배열 : 가장 기본적인 자료 구성법
 같은 종류(?)의 자료가 여러개 필요할 경우 사용 js는 섞어서 사용 가능. (비권장)
 모든 자료는 낱개의 자료로 변수에 담아야 한다.
 js 의 배열은 타 언어의 배열과 주조적으로 많은차이가 있다.
 js 의 배열은 java의 list 구조와 유사하다.
 js 는 동적으로 메모리 할당이 이루어지기 때문이다.
 배열은  자료의 개수를 알수있는 속성이 있다. / 배열명.length  (read / write 속성을 갖는다.)
 */
var arrData = [1,2,3];
console.log('자료의 개수는 => ', arrData.length);
// read 로 쓰임

arrData.length = 15 ;
console.log(arrData.length);
// 타언어는 길이 속성에 값을 넣을 수 없음 js는 가능
// read(읽기)만 가능하지 write(쓰기)는 할 수 없다.
for(let i = 0 ; i < arrData.length ; i=i+1){
     console.log(i+1 + '번째 배열의 값 = ' + arrData[i]);
};
// 배열은 같은 종류만 들어가야 하지만 유연하게 경우에 따라서 js 한정 사용하는 것을 결정.
var arrData2 = [3221,'doil',3222,'diak',3223,'dmao']
//권장 양쌤
//규칙을 가진 다른종류의 배열은 경우에 따라 효율적으로 사용 가능 
var arrData3 = [1,2,3,4,]// 절대 사용하지 말자.
/* 
구동환경에 따라 배열의 자료 개수를 4개 혹은 5개로 판단 할 수있다.
구동환경을 바꾸기 전까지는 못찾음
뒤질 수 있다.
*/

2. 방법론 과 도구의 파워 그리고 그 도구를 만든사람에 대해 존경심이 든다. (높을 존, 공경 경)

배열 (배열도 객체이다.) *****

  • 같은 종류의 자료들을 묶기(그룹화)위한 주된 용도.
  • literal 사용 (내부적으로는 생성자를 이용해서 배열이 생성된다.)
    • let arrBox = [1,2,3]; // 요소가 3개로 이루어진 배열 생성.
    • let arrBox2= []; // 빈배열 생성
    • let arrBox3= [10]; // 요소 1개 배열 생성
  • 생성자를 이용
    • let arrBox1 = new Array(1,2,3);
    • let arrBox2 = new Array();
    • let arrBox3 = new Array(10); //요소 1개 배열 생성 x. 10개의 요소를 가지는 배열 생성
    • 생성자란 객체자료를 생성하는 것으로
    • 클래스 이름(반드시 첫글자를 대문자)과 동일한 method를 호출해서 자료 생성.
    • 객체 생성 연산자(new)를 이용한다. (생략 가능하지만, 비권장)
  • 기본 배열과 요소 1과 생성자 Array 요소1의 차이 예제
       let arrBox = [10]; console.log(arrBox.length);
       // 출력 = 1
       let arrBox2= new Array(10); console.log(arrBox2.length);
       // 출력 = 10
    • 배열 속성 예제
       // 객체 
       // js array sort attribute
       let arrBox5 = [4,2,1,2,4,5];
       console.log(arrBox5.sort(), '-------------');
       // 출력 : [1, 2, 2, 4, 4, 5] '-------------'
    • 입력 값을 배열에 넣는 법

객체 *****

  • 관련성 있는 자료와 처리 동작을 속성과 메서드로 이루어진 자료 구조

방법론

  • 대강 어떤 도구(방법)이 있었는지만 알면된다. 그래야 찾아볼 수 있다.
  • 뭐가 필요한지, 모르는지를 모르면 검색을 할 수 없다.
  • 최소한의 검색을 할것이 무엇인지를 머리에 담아두어야 한다.
  • 무식하게 외울 필요는 없다.

3. 필요한 것을 명확하게 알고 검색해라.찾을때까지

배열에 data 입력.

  • .push
    • arrayname.push

      js array sort

  • 숫자의 크기대로 분류
    • 함수를 넣어 매개변수에 값에 따라
    • array.sort(function(a,z){return a-z});
      • a 부터 z니까 오름차순
    • array.sort(function(z,a){return z-a});
      • z 부터 a니까 내림차순

4. 자기 계발 과 직접만들자는 개발자 습관을 만들자.

  • 목차 잘 보자

    자기 계발 과 보상

  • 개발 과 계발

  • 개발
    • 새로운 것 만드는 행위
  • 계발
    • 향상하는 행위
    • 개발자의 중요 도구는 책이다.

      배열 추가/ 반환

  • .push 에 데이터를 넣고 나면 무엇을 반환하는가를 알아야한다.
    • array.push[data]; / console.log(array); 출력값 : 1
    • 반환하는 값은 배열의 길이를 반환한다. 즉 배열안의 데이터 개수를 표기한다.
    • 만약 속성을 못찾거나 없다면 내가 만든다는 마음으로 접근하다.
      • 그것이 개발자 니까..(펀쿨섹)
    • 필요한 것을 만드는 능력을 기르는 것
    • 입력만 하지 말고 출력한 값을 확인하는 습관을 가지면 좋다.
      • 반환 값을 변수에 넣고 출력하는 커맨드.

        배열 데이터 삭제 메소드

  • pop();
    • 배열자료의 맨 마지막을 지운다
    • 반환하는 값은 ? => 제거한 데이터를 반환한다.
    • 만들려면?
      • .length -1 (심화)

5.

배열의 methods

  • Data input
    • 맨 앞에 unshift
      • 비 권장
      • 자료의 구성을 잘 만들면 사용할 필요가 없다.
      • 맨 앞의 자료 삽입,삭제는 성능에 부담을 준다.
        • (굴러온 돌이 앞으로 오면 박힌돌들이 한칸씩 움직이니까)
      • 사용하기 이전에 배열 구조부터 잘 만들자.
    • 맨 뒤에 push
  • Data delete
    • 맨 앞에 shift
    • 맨 뒤에 pop

      기본 과 참조 타입 / 참조 타입의 역할 (low level)

  • 배열은 참조 타입이다.
  • 모든 객체는 참조 타입이다.
    • 실제 data 가 저장되는 곳은 따로 있고,
    • 참조 타입은 data가 어디에 있고, 어디서 시작하는지를 알려주는 표지판 같은 역이다.
  • 숫자,문자열, 논리 자료는 기본타입.
  • 배열 간의 동등 비교의 값은 false다. 데이터가 같을지라도.

    const

  • 열쇠 상자이다. data 수정을 못한다.
  • 상자 자체는 못 변경하나, 상자 안에 있는 객체의 data는 수정 가능하다. / 겉바 속촉

6.

C.S

  • 왜 index는 0부터 시작하나?
    • 배열의 index는 주소를 계산하는 정보 // java ,c++, c 에서 나옴
    • 주소 == 메모리(ram)의 위치.
  • bit - Byte - word
    • 1 byte == 주소의 단위다.(메모리)
    • word 명령이다.
  • 16 , 32 , 64 bit 의 차이
    • m/w 2byte ->16bit
    • f/w 4byte ->32bit
    • d/w 8byte ->64bit
  • Booting - IPL
    • 처음에 시스템 관리 프로그램 불러온다
    • Initial Program Loding
    • Loding 보조기억을 메모리로 끌어올리는것
    • 메모리를 cpu로 올리는 것

      메모리의 구조, 구역할당과 주소,변수와의 관계

  • 프로그램이 실행하면 OS는 프로그램을 메모리에 할당한다.
    • 메모리라는 땅에 구역을 나눠준다라고 이해. 이하 js땅 부름.
    • js땅의 구역에는 StringArea라는 곳이 있다.
    • 객체의 data들은 변수 k 선언 동시에 js땅의 StringArea 라고 불리는 곳에 저장된다.
    • 변수 k 는 참조 타입이며, 표지판의 역할을 해준다. StringArea에 담겨있는 data를.
      • 변수는 할당되어 있는 주소값을 사람이 외울 수 없으니 기호화 시킨것이다.
    • 변수 에 매칭이 되는 실제 주소가 있다.(맵핑.) 마치 도메인 주소가 ip주소를 맵핑한 것 처럼.
    • 변수(이름) == 할당 주소를 기호화 한것뿐 안에는 주소가 들어있다.
    • 문자열은 문자 낱개끼리 모여있는 참조형이다.(엄격하게 말하자면)
    • 기존 변수 데이터에 데이터를 추가로 넣으면 덮어쓰기가 아니라 다른이름으로 새로 저장한다.
      • 기존 데이터 묶음은 쓰레기가 되어 누적된다.(최근은 자동 지워준다.)(c언어는 안지운다.)
    • 배열의 인덱스란 실제 메모리 상에 존재하는 자료의 시작위치를 계산하는 정보이다.
    • 배열에 있는 주소 정보 + (index * data size(정수 = 4))
    • 데이터 타입이란
      • 메모리상에 자료를 저장할 때 어떻게 2진수(binary bit열)로 저장할 건인지(어디서부터 어디까지).
      • 저장된 데이터라면 저장된 2진수의 비트 자료를 어떻게 해석해야 하는지를 알려주는 정보이다.
      • 변수는 메모리 상에 자료가 저장이 될 때 시작되는 특정 위치(주소)를 개발자가 쉽게 구분할 수 있도록
        기호화 한 것.
      • 배열의 인덱스란 실제 메모리 상에 존재하는 자료의 시작위치를 계산하는 정보이다.

7.

js array dimension

  • 배열의 길이 구함.

  • 배열 안에 배열이 있을 경우. 배열의 차원.

    • 배열의 개수 와 자료의 개수를 분별
    • [[1,2],[3,4],[5,6],[7,8,9]]
      • 배열의 개수: 4
      • 자료 의 개수:9개
    • 배열의 배열 자료 호출
      • array[0][1] // 첫번째 배열의 2번째 자료 호출.

        배열에 들어있는 함수 실행 ()으로 함수 실행.

       arrData4[0]();

    배열안 객체 실행 .으로 객체 호출.

        array[0].name;
        array[2].func1();

    구조 안의 위계를 잘 봐야 경로를 파악할 수 있다.

    변수가 메모리상에 만들어질 때 자료의 종류와 크기가 결정된다.

    data가 들어갈때 만들어진다 해서 동적언어 이다.
    선언될때 결정되는 것도 있다.


8.정리 복습