본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


앵귤러, 리엑트, 뷰/Angular Tutorial(old)

앵귤러 튜토리얼 (Angular tutorial) - 2

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 5. 21.

* 제가 다시 작성한 최신 튜토리얼 수정본 입니다. 아래 주소를 통해서 진행하시는 것을 권장 드립니다. ^^

lts0606.tistory.com/328

 

앵귤러 튜토리얼(Angular tutorial) - 1

안녕하세요. 앵귤러에 대해서 알아보기위해 이곳을 찾아주신 분 들께 감사의 말씀 드립니다.^^ 천천히, 초심자도 조금 더 쉽게 접근할 수 있도록 내용을 구성하여 보겠습니다. 어��

lts0606.tistory.com

 

 


 

 

전시간에는 기본적인 환경 세팅에 대해 살펴 보았다.

뭐가뭔지 전부 알기에는 방대하므로 아직까지는 app.component.ts만 사용해서 차근차근 알아가도록 하자.

기존에는 window키와 R키를 누른뒤에 CMD를 입력해서 실행하였다면,

비쥬얼 스튜디오 코드에서는 Ctrl + ~ 키를 눌러서 cmd를 실행 할 수 있다.

 

명령어는 해당 프로젝트 디렉토리에서 ng serve를 입력하자.

ng serve 라는 명령어는 앵귤러를 개발할 때 필요한 테스트 서버를 동작시켜주는 역할을 한다.

일단..앵귤러를 개발하려면 ng serve를 입력해서 개발용 서버를 동작시켜주는 것으로 이해하자.

 

만약 위와 같은 화면을 만나지 못하였다면 걱정할 필요 없다.

비쥬얼 스튜디오코드를 실행한 뒤에 맨 위의 파일 - 폴더열기를 클릭하여주자.

아래 사진처럼 폴더열기를 클릭한 뒤에 이전시간에 만든 study 폴더까지만 선택하여주면 된다.

폴더 열기에서 study가 있는 곳 까지만 선택 하여야 한다!!!

 

실행이 되었다면 이제 자료형에 대해서 먼저 살펴보자.

Typescript 기반으로 만들어진 앵귤러는 Typescript언어의 자료형을 그대로 지원한다. 타입스크립트를 조금 살펴보려면 아래 링크에서 타입스크립트와 관련된 연습을 해 보아도 좋다.

https://lts0606.tistory.com/17

 

TypeScript 시작

Javascript 문법이 강력해지고 규모가 커지면서 코드의 관리가 중요해졌다. 자바스크립트는 객체지향 언어의 개념보다는 동적타입언어, 느슨한타입 언어로써 코드량이 많아짐에 따라 규모가 큰 프로젝트에서는 관..

lts0606.tistory.com

 

이번에도 역시 constructor 내부에 코딩을 통해서 자료형의 종류를 살펴 보겠다.

앵귤러에서는 string, number, boolean 및 기타 배열 등 자바스크립트에서 사용되던 대부분의 자료형이 사용 가능하며,

자바처럼 접근제어자(private, public)의 기능도 지원한다.

예제코드를 살펴보자.

  constructor() {
    console.log('Working');  
    var number = 1;
    console.log('number -> ', number);  
    console.log(number * 10);
    var trueFalse = true;
    console.log(trueFalse);
  }

 

constructor부분만 보면 그리 어렵지가 않다. 콘솔 출력은 브라우저에서 볼 수 있다 http://localhost:4200/

문법적인 오류를 방지하기 위해서 자료형을 명시할 수 있게 지원해 준다.

아래 코드를 보자.

  constructor() {
    
    var num : number = 1;
    console.log(num);
    var text : string = 'text';
    console.log(text);

    var all : any = 'abcd';
    all = 1;
    
  }

 

"var 변수 : 자료형태 = 값" 이러한 규칙이 있다는게 놀라울 따름이다.

즉 해당 변수에 다른 자료형이 들어가면 오류가 나게 된다.

자세히 보면 any라는 녀석을 볼 수 있는데 해당 자료형은 모든지 받는, 즉 Object 개념을 지니고 있다.

swift가 생각나는건 뭘까..

다음 코드를 살펴보자.

  constructor() {
    
    var text : string = 'hello world';
    console.log(text);
    
    var num : number = 1234;
    console.log(num);
    
    var bool : boolean = false;
    console.log(bool);
    
    var method = (arg?) : void=>{ console.log(arg);}  //void로 선언
    //파라미터의 arg뒤에있는 ?(물음표)는 옵셔널이다. 있어도 되고 없어도 되는 값이다.
    // 당연히 var method : void는 안된다. 즉 함수에서 리턴값이 없을 때 붙인다.
    method('print');
    
    var data : any = null;  //객체값이 비어있음
    console.log(data);
    
    method();  //undefined 효과
  }

 

가운데 method 라는 녀석이 있다. 요녀석은 람다표현식으로 이루어 졌으며 자바스크립트로 비교하자면 아래처럼 표현 할 수 있다.

var method = function(arg){console.log(arg);}

method('print');

 

이미 눈치챘을지 모르겠지만 여태것 사용하던 constructor는 생성자를 의미한다.

즉, 해당 app.commponent.ts가 실행될 때 딱 한번만 최초에 무조건 같이 실행해 주는 역할을 한다.

굳이 왜 쓰는지는 나중에 알게 되므로 일단..무조건 딱 한번만 최초에 실행되는 함수라고 이해하자.

사용자가 어떠한 이벤트나 명령을 따로 주지 않아도 실행되는 함수라고 생각하면된다!!

 

그러면, 생성자에 전부 코딩을 할 수 없으니 다른 함수를 만들어 보겠다.

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'study';

  public printAll(arg){
    console.log(arg);
  }

  private print(arg){
    console.log(arg);
  }

  constructor() {
    var text : string = 'plain text';
    this.print(text);
    this.printAll(text);
  }
}

 

자바를 경험한 사람이라면 private와 public을 본 순간 이해했을 것이다.

public 이라는 접근 제어자는 외부 다른 곳에서도 해당 함수를 실행 할 수 있게 해주는 의미이며, private는 해당 app.component.ts 내부에서만 사용 가능하다는 의미이다.

뭔소리나면..

private가 붙은 함수는 다른 곳에서 호출을 못하고, public이 붙은 함수는 다른 곳에서 불러올 수 있다는 의미이다.

일반 자바스크립트에 비유하면..내가만든 function이 private가 붙으면 특정한 곳에서만 쓸 수있고, public이 붙으면 아무곳에서나 호출 가능하다고 보면 된다.

* 앵귤러 9.0이상의 버전에서는 private 접근 제어자가 붙을 경우 해당 컴포넌트에서만 접근이 가능하다.

* 다른 어떠한 곳에서도 private가 붙은 곳에는 접근이 불가능 하다   (2020-04-14 작성)

 

지금이야 파일 1개로 연습하지만 나중에 규모가 커지고 파일 갯수가 많아지게 된다면 private와 public의 의미가 잘 다가 올 것이다.

조금 특이한 것은 함수를 사용할 때 this를 붙여서 쓴 점이다.

this를 삭제하면 에러가 난다. 일종의 규칙이라 볼 수 있다.

모든 글로벌한 함수 및 변수는 반드시 this를 사용해 주어야 한다. (개발도구가 오류난다고 먼저 알려준다. ^^)

마찬가지로 멤버변수에게도 자료형과 접근제어자를 쓸 수 있다.

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  private title : string = 'study';
  public num : number = 10;
  public all : any = new Array();

  public printAll(arg){
    console.log(arg);
  }

  private print(arg){
    console.log(arg);
  }

  constructor() {
    var text : string = 'plain text';
    this.print(text);  //규칙! this가 붙어야 한다!
    this.printAll(text);

    console.log(this.title, this.num, this.all);  //멤버들도 this를 써 주어야 한다.
  }
}

지금 것 살펴본 app.component.ts는 일종의 백그라운드(화면을 구성하는 이외의 기능)의 개념이라 볼 수 있다.

즉, 화면을 구성하는 기능은 따로 있고 데이터 처리 변수 정의 및 함수를 app.component.ts 곳에서 한다고 생각하면 된다.

음..Javascript로 치면 html파일에서 <script></script>의 역할을 하는 곳으로 생각하면 된다.

 

위 상단의 @Component라는 곳을 살펴 보면 내부에 templateUrl이라는 곳이 존재한다. 해당 파일 또한 src - app 폴더에 존재하는데 해당파일을 클릭해보자.

클릭하면 여태 껏 동작한 화면내용을 볼 수 있다.

여기있었군!!! html 파일내용이다.

 

자, 그럼 이 두개의 개념을 살펴보면 아래와 같은 정의를 낼 수 있다.

1. app.component.ts는 자바스크립트의 document.ready 이후 실행할 *.js 파일 같은 개념이다.

2. app.component.ts 내부 @Component안에 templateUrl은 화면을 구성하는 부분이다.

 

다음장에서는 이러한 app.component.html과 app.component.ts와의 관계에 대해서 살펴보도록 하자.

 

 

* 추가(2020-04-14)

 - private 와 관련된 속성이 해당 컴포넌트에서만 사용하도록 되어있습니다.

 - 앵귤러 버전을 9.0이상으로 사용중이신 분들은 외부에서 접근하는 변수나 함수에 대해서는 private부분을 제거하셔야 합니다.

private는 해당 컴포넌트에서만 접근하도록 바뀌었습니다.

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글