[JS] getter,setter / import,export

2022. 1. 5. 20:58·Archive
반응형

 

 

 

     

     

     

     

     


    getter / setter

     

     : 데이터의 무결성을 보존하기 위해 쓰는 키워드이다.

       데이터를 수정하거나 출력할 때 직접 원본 데이터를 만지는게 아니라 함수로 간접적으로 다룬다. (immutable)

     

     

    //내년나이를 알고싶으면?  age를 직접사용하지않고, nextAge라는 함수를 따로 만들어서 
    let 사람 = {
      student: true,
      age: 14,
      nextAge() {
        return this.age + 1;
      },
    };

     

     

    🤷🏻‍♀️ 왜 굳이 따로 꺼내서 사용함?

       - object안이 복잡할수록 함수 만들어놓는게 데이터 꺼내기 쉽다.

       - 내부에 있는 age 변수를 건드리지 않아서 실수방지하므로 좀 더 안전해진다.

     

     

     

     

     

    🔻 함수로 object 데이터 수정

     

       object안 데이터를 수정하고 싶을 때 object.key = value 이렇게 등호를 사용해서 수정가능하지만,

       안정성을 더하기위해서 함수를 만들어서 수정한다.

    // parseInt를 붙여서 number를 입력안했을 경우 방지
    let 사람 = {
      age: 14,
      setAge(나이) {
        this.age = parseInt(나이);
      },
    };
    
    사람.setAge("44");

     

     

     set, get 키워드를 추가해서 좀더 간결하게 표현하기

     : 등호로 데이터 입력가능하고 좀 더 직관적이다.

     

    set 붙은 함수들을 setter라고 한다.

    데이터를 입력, 수정해주는 함수 / 파라미터가 한개 꼭 존재한다.

    let 사람 = {
      age: 14,
      set setAge(나이) {
        this.age = parseInt(나이);
      },
    };
    
    사람.setAge = 40;

     

    getter 함수

    : 데이터를 뽑아주고, 가져오는 함수

    파라미터가 없고 함수내에 return을 가져야한다.

    let 사람 = {
      age: 14,
      get nextAge() {
        return this.age + 1;
      },
    };
    
    console.log(사람.nextAge);

     

     

     

    class에서 사용

    class man {
      constructor() {
        this.name = "kim";
        this.age = 20;
      }
      get nextAge1() {
        return this.age + 1;
      }
      set setAge(age1) {
        this.age = age1;
      }
    }
    
    let man1 = new man();
    man1.setAge = 50;
    console.log(man1);
    //출력 : {name : 'kim', age: 50}

     


     

     

     

     

     

    Import / Export

     

     

    HTML 파일 안에서 es6 import 문법 쓰려면 script태그 안에 type을 module로 설정한다.

    <script type="module"></script>

     

     

     

    🔻 (Named) export

       : 많은 것들을 export / import 하고 싶을 때

     

          export const 변수명 = ?    /    혹은 한꺼번에   export { 변수명1, 변수명2, ... }

          import { 변수명1, 변수명2, ... } from '경로'

     

    // math.js
    export const plus = (a,b) => a + b;
    export const minus = (a,b) => a - b;
    export const divide = (a,b) => a / b;
    
    // 혹은 한꺼번에
    export {plus, minus, divide}
    
    // main.js
    // export한 이름 그대로 사용
    import {plus, minus, divide} from "./math";
    // import하는 이름을 바꾸고 싶을 때 as
    import {plus as add} from '.math';

     

     

     

    🔻export default

     

     : 여러 함수를 갖고있는 한개의 객체를 디폴트로 export

      각 파일마다 단 한개의 Default export 만 존재 할 수 있음

     

      export defalut 변수명

      import 어쩌구 from '경로'    (어쩌구에 변수명 작명가능)

    // math.js
    const plus = (a,b) => a + b;
    const minus = (a,b) => a - b;
    const divide = (a,b) => a / b;
    
    export default { plus, minus, divide };
    
    // main.js
    // export한 이름과 다르게 가능
    import myMath from "./math";
    
    myMath.plus(2,2);
    // * = everything (math 모듈에서 모든걸 Import 함)
    import * as myMath from "./math";
    
    whatever.plus(2,2);

     

     

     

    > import 너무 많으면 * 기호를 써서 한꺼번에 가져온다. ( as로 변수명 새로 지어준다.)

    (library.js)
    
    var a = 10;
    var b = 20;
    var c = 30;
    export {a,b};
    export default c;
    
    ----------------------------
    
    (index.html)
    
    <script type="module">
      import c, {* as 변수모음} from 'library.js';
      console.log(변수모음.a);
    </script>

     

     

     

     

     

    🤷🏻‍♀️ export default와 export의 차이점?

     

    export default는 한번만 쓸 수 있고, import 할 때 변수명을 새롭게 작명 가능하다.

    export는 변수명을 import와 export시에 같게 적어줘야한다.

     

     

     

     

     

    🤷🏻‍♀️ 로딩을 빠르게 하기위해선?

     

    1. 필요한것만 import

    // math.js
    const plus = (a,b) => a + b;
    const minus = (a,b) => a - b;
    const divide = (a,b) => a / b;
    
    export default { plus, minus, divide };
    
    // main.js
    // named export사용
    import {plus} from "./math";
    
    myMath.plus(2,2);

     

     

    2. Dynamic import

     : 실제 유저가 사용할 모듈만 import

    function doMath () {
    	import ('./math')
        .then (math => math.plus(2,2));
    }
    btn.addEventListener('click', doMath');
    async function doMath () {
    	const math = await import ('./math')
        math => math.plus(2,2);
    }
    btn.addEventListener('click', doMath');

     

     

     

     

     

    반응형
    저작자표시 비영리 변경금지 (새창열림)

    'Archive' 카테고리의 다른 글

    [JS] 비동기 / Promise / async.await  (1) 2022.01.06
    [GIT] Github 잔디 안심어지는 현상  (0) 2022.01.05
    [TS] Private / Static / Generic 등  (0) 2022.01.05
    [TS] instanceof / Class types / Interface  (1) 2022.01.01
    [TS] Type Aliases / Literal Type  (1) 2021.12.30
    'Archive' 카테고리의 다른 글
    • [JS] 비동기 / Promise / async.await
    • [GIT] Github 잔디 안심어지는 현상
    • [TS] Private / Static / Generic 등
    • [TS] instanceof / Class types / Interface
    manon_e
    manon_e
    • manon_e
      개발 블로그
      manon_e
    • 전체
      오늘
      어제
      • 💻 (102)
        • Frontend (10)
          • React | Next.js (6)
          • Memo (4)
        • CS (2)
          • 네트워크 (0)
          • 자료구조 + 알고리즘 (0)
          • 컴퓨터 구조 + 운영체제 (2)
        • Cloud & Infra (0)
        • Project (4)
        • Archive (86)
    • 인기 글

    • 태그

      getstaticprops
      axios
      Node
      REACT
      git
      Next.js
      오블완
      vscode
      node.js
      pre-rendering
      JavaScript
      티스토리챌린지
      Prisma
      typeScript
      State
      ES6
      정규표현식
      useEffect
      Component
      비동기
    • hELLO· Designed By정상우.v4.10.3
    manon_e
    [JS] getter,setter / import,export
    상단으로

    티스토리툴바