VSCode로 자바스크립트를 연습하고 있는데

자신이 원하는 에러 메시지(변수 재선언할 경우, 세미콜론을 꼭 붙이도록 할 경우 등)를

에디터가 출력하게 하고 싶은 경우가 있다

기본적으로 JS의 경우 위의 에러 메시지를 잡아주지 않아서

확장기능을 설치해서 사용한다



1. VSCode 확장기능에서 ESLint를 설치



2. 노드js 설치

https://nodejs.org/




3. "Ctrl + ~"로 터미널 실행


터미널에서 아래 명령어 입력


npm install -g eslint




4. package.json 생성


계속 터미널에서 명령어를 입력


npm init


입력을 요구하는데 쭉 엔터로 넘어가고

마지막에 yes입력


그러면 기본값으로 package.json파일이 생성




5. .eslintrc.js 생성


터미널에서 마지막으로 명령어 입력


eslint --init


어떤 설정을 사용할 것인지 물어본다

자신이 사용하는 것을 위주로 선택(수정가능하니 부담x)


중간에 설치 질문 나오는 것 yes


설치를 종료하고 나면 ".eslintrc.js"파일이 생성된다

이 파일에 자신이 원하는 규칙을 

rules에 입력하면 된다.


규칙들은 ESLint 사이트 참조

https://eslint.org/docs/rules/




6. settings.json 수정


1) F1키 눌러서 기본 설정 클릭




2) setting를 치고 스크롤을 내리다보면 보이는

settings.json에서 편집하기 클릭




3) settings.json 파일에 아래 설정 저장

    자신이 사용하는 언어가 있으면 추가하면 됨


"eslint.validate": [
{"language": "javascript"},
{"language": "html"},
],



4) .eslintrc.js 파일 수정(자신이 최근에 사용하던 폴더에 생성되어 있음)

    저는 아래와 같이 설정


"extends": "eslint:recommended",
"rules": {
"indent":[
"error",
4
],
"no-unused-vars": 1,
"no-use-before-define": 1,
"no-redeclare": 1,
"no-console":0,
}



5) "*.js"파일에서 코드 작성

   아래 문제창에서 에러 메시지 출력



객체는 새로운 값을 가진 프로퍼티를 생성하고

생성된 프로퍼티에 접근해서 해당 값을 읽거나

원하는 값으로 프로퍼티를 갱신할 수 있다.


객체의 프로퍼티에 접근하려면 마침표나 대괄호를 사용한다.

대괄호 표기법에서는 접근하려는 프로퍼티의 이름을

문자열의 형태로 만든다.


객체 프로퍼티 읽기


var obj = {
name : 'Gil-dong',
age : 30
};

//객체 프로퍼티 읽기
//마침표 표기
console.log(obj.name);//-> Gil-dong
//대괄호 표기
console.log(obj['name']);//-> Gil-dong
//gender라는 객체가 없으므로
console.log(obj.gender);//-> undefined


객체 프로퍼티 갱신


var obj = {
name : 'Gil-dong',
age : 30
};

//객체 프로퍼티 갱신
//age의 기존 값을 변경
obj.age = 25;
console.log(obj.age);//-> 25
console.log(obj['age']);//-> 25


객체 프로퍼티 동적 생성


var obj = {
name : 'Gil-dong',
age : 30
};

//객체 프로퍼티 동적 생성
//객체가 생성된 후에도 프로퍼티를 생성해서 객체에 추가할 수 있다.
//gender라는 프로퍼티를 생성 후 male이라는 값을 추가.
obj.gender = 'male';
console.log(obj.gender);//-> male


객체 프로퍼티 삭제


//객체 프로퍼티 삭제
var obj = {
name : 'Gil-dong',
age : 30,
gender : 'male'
};

console.log(obj.gender);//-> male
//gender 프로퍼티 삭제
delete obj.gender;
console.log(obj.gender);//-> undefined

//obj 객체 삭제
delete obj;
console.log(obj.name);//-> Gil-dong
//delete연산자는 객체를 삭제하지 못한다.


대괄호 표기법만 사용해야 하는 경우


var obj = {
name : 'Gil-dong',
age : 30
};

//대괄호 표기법만 사용해야 하는 경우
//접근하려는 프로퍼티가 표현식이거나 예약어일 경우 사용
//아래와 같이 phone-number은 '-'가 있는 표현식
obj['phone-number'] = '010-1111';
console.log(obj['phone-number']);


객체 내 모든 프로퍼티 출력


//for in문을 사용하면 객체에 포함된
//모든 프로퍼티에 대해 반복 수행 가능

//객체 리터럴을 이용한 obj 객체 생성
var obj = {
name : 'Gil-dong',
age : 30,
gender : 'male'
};

//prop 변수 선언
var prop;

//prop변수에 obj객체의 프로퍼티가 하나씩 할당
for(prop in obj){
//prop에 할당된 프로퍼티 이름을 이용
//대괄호 표기법을 사용하여 값을 출력
console.log(prop, obj[prop]);
}


'프로그래밍 > JavaScript' 카테고리의 다른 글

참조 타입 객체 생성  (0) 2019.03.12
자바스크립트 기본 타입  (0) 2019.03.11

객체 : 키(key)와 값(value)의 쌍들을 저장하는 컨테이너


속성(Property) : 키와 값의 한 쌍

1) 언제든지 추가하거나 삭제가 가능.

2) 값으로 다른 객체의 참조를 가질 수 있다. 

3) 값으로 함수 객체를 가질 수도 있는데 이 속성을 메서드라 부른다


객체를 생성하는 방식

1) 객체 생성자 함수

2) 객체 리터럴

3) 생성자 함수



//생성자 함수를 사용한 객체 생성
//Object의 O는 대문자임을 주의
var obj = new Object();

//obj 객체 속성(property) 생성
obj.name = 'Gil-dong';
obj.age = 30;
obj.gender = 'male';

//obj 객체의 타입
console.log(typeof obj);//-> object 타입
//obj 객체의 속성 출력
console.log(obj);//-> 객체의 키와 값의 형태로 출력


//리터럴 : 표기법
//객체 리터럴 : 객체를 생성하는 표기법을 의미
//객체 리터럴 방식 obj 객체 생성
var obj = {
name : 'Gil-dong',
age : 30,
gender : 'male'
};
// {}로 객체를 생성하며 아무것도 적지 않으면 빈 객체가 생성
// "속성 이름" : "속성 값"형태로 표기

console.log(typeof obj);//-> object 타입
console.log(obj);//-> 객체의 키와 값의 형태로 출력

//생성자 함수 사용 추후..


'프로그래밍 > JavaScript' 카테고리의 다른 글

객체 프로퍼티  (0) 2019.03.12
자바스크립트 기본 타입  (0) 2019.03.11

기본(원시) 타입 :  Number, String, Boolean, undefined, null

참조 타입 : 기본타입을 제외한 모든 타입, 객체(배열, 함수, 정규표현식, Date, RegExp 등)


변수 선언 키워드 var


기본데이터 타입으로 만든 변수는 typeof연산자를 이용해 출력하면

데이터타입을 나타내는 문자열이 출력

//숫자 
var int = 10;
var float = 1.1;
//모든 숫자를 실수로 처리
//64비트 부동소수점 형태로 저장
console.log(typeof int, typeof float); //-> number, number

//문자
var singlech = 'single';
var doublech = "double";
//한번 정의된 문자는 변하지 않음
//정해진 문자열에 배열의 인덱스로 새로운 문자를 대입하여도 변하지 않음
//한번 생성된 문자열은 읽기만 가능하고 수정은 불가능
console.log(typeof singlech, typeof doublech); //-> string, string

//Bool
var booltype = true;
//''나 ""로 작성하지 않음에 주의
console.log(typeof booltype);//-> boolean 

//undefined 
var emptyspace;
//아무런 값이 할당되지 않을 때 사용
console.log(typeof emptyspace);//-> undefined의 하나의 데이터 타입

//null
var nullobject = null;
//명시적으로 값이 비어있음을 알려줄 때 사용
//null은 typeof로 확인이 안되며 아래와 같이 확인
console.log(nullobject === null);//-> true

console.log(typeof nullobject);//-> object


'프로그래밍 > JavaScript' 카테고리의 다른 글

객체 프로퍼티  (0) 2019.03.12
참조 타입 객체 생성  (0) 2019.03.12
 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	//상태표시줄 없애려면 아래코드 주석처리
	//if (!m_wndStatusBar.Create(this))
	//{
	//	TRACE0("상태 표시줄을 만들지 못했습니다.\n");
	//	return -1;      // 만들지 못했습니다.
	//	ModifyStyle(WS_CAPTION, NULL);
	//}
	//m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	//타이틀 수정
	cs.style &= ~FWS_ADDTOTITLE;
	cs.lpszName = L"미세먼지";

	//창 크기 조정
	cs.cx = 1200;
	cs.cy = 650;

	//메뉴 창 없애기
	cs.hMenu = NULL;
}

BOOL CView::PreCreateWindow(CREATESTRUCT& cs)
{
	//테두리 없애기
	cs.style &= ~WS_BORDER;
}

void CView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	//창 크기를 원하는 사이즈만큼 늘렸는데도 
	//일정크기 이상 커지지 않으면 이 함수를 주석처리
	//ResizeParentToFit();
}

sizeof 연산자


sizeof A  : A 메모리의 크기를 

바이트 단위로 알려준다.


cpu 하는 연산이 아닌 

컴파일러가 하는 연산.


컴파일러가 기계어로 

번역하는 과정에서 발생하는 연산.


자료형의 크기를 컴파일러에게 물어보는 .


  

 

int Data = 10;

printf("%d\n", sizeof(Data));

 

변수 Data의 자료형은 int이므로 

4를 출력

 


printf("%d\n"sizeof(char*));

 

32비트 어플리케이션 VS 사용하고 있다면 

char 대한 포인터이므로 

4 출력



char Name[16] = { "Start" };

printf("%d\n", sizeof(Name));

 

배열의 이름인 

Name 자료형은 char이고

결국 char[16] 같으므로 

16 출력

 

 

char Name[16] = { "Start" };

printf("%d\n", sizeof(Name + 1));

 

"char[] == char*"

"[] = *" 로 변환 될 수 있다.


"char*" 본질은 주소이므로 

여기에 정수(int)'1'을 더하면 연산결과는 

다시 주소를 담을 있는 포인터가 된다.

따라서 4 출력


(포인터에 대해 아직 잘 몰라서 일단 들은대로 적음)

(나중에 제대로 이해하면 첫번째 문단의 이유를 다시 제대로 적겠습니다)


 

int Data = 10;

printf("%d\n", sizeof(++Data));

printf("%d\n", Data);

 

sizeof연산은 컴파일러가 하는 연산.

단항증감에 대한 연산을 수행하지 않고

자료형이 무엇인가를 알려주는 것.


따라서 Data변수의 자료형은 int이므로

4 출력하게 된다.


다음행에 변수 Data 정보를 출력해보면

원래 Data 값인 10 출력된다.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **

'프로그래밍 > C언어' 카테고리의 다른 글

쇼트서킷(Short-circuit)  (0) 2018.07.02
단항 증감 연산자  (0) 2018.06.28
단순 대입 연산자  (0) 2018.06.28
비트연산자  (0) 2018.06.28
자료형, 보수와 음수표현  (0) 2018.06.14

관계 연산자

A == B : AB가 같으면 참(1)

A != B : AB가 다르면 참(1)

 


논리 연산자

A && B : AB 모두 참일 경우 참(1). 논리곱

A || B : AB 둘 중 하나가 참이면 참(1). 논리합

!A : A의 결과를 참이면 거짓으로

 거짓이면 참으로 반전시킨다.

 


쇼트서킷(Short-circuit)


논리합의 경우 둘 중 하나면 참이다.

따라서 왼쪽항이 참이면 

오른쪽항은 검사하지 않아도

논리합의 전체 결과는 참이다


하지만 논리곱에서는 

왼쪽항이 참인 경우에만

오른쪽항의 연산을 수행한다.

반대로 왼쪽항이 거짓이라면 

오른쪽항을 검사하지 않아도

전체결과는 거짓이 된다.


이 같은 특징으로 

논리연산자와 조합된 다른 연산식이나

조건식이 생략되는 경우를 쇼트서킷이라 한다.

불필요한 연산이 줄어들면 

프로그램의 효율이 그만큼 높아진다.

논리 연산은 무조건 왼쪽부터 시작


 

int k, x = -1, y = -1, z = 1;

k = ++x || ++y && ++z;

printf("%d %d %d %d\n", k, x, y, z); 

 

++x의 연산을 수행해서 x의 값이 0으로 변경.

‘||’연산은 논리합인 논리식이므로

두번째 항을 연산.


++y연산을 수행해서 y의 값이 0으로 변경.


‘&&’연산은 논리곱인 논리식이므로

왼쪽항이 거짓이면 

오른쪽항은 연산을 수행하지 않는다.


따라서 ++z는 수행하지 않게 되고 

값은 1에서 변하지 않는다.


‘||’연산에서 

왼쪽항 오른쪽항 모두 거짓이므로

k에 저장되는 값은 0이 된다.

따라서 0, 0, 0, 1이 출력.



int k, x = -1, y = -1, z = 1;

k = x++ || ++y && ++z;

printf("%d %d %d %d\n", k, x, y, z);


x++연산은 행의 가장 마지막에 연산을 하므로

x의 값인 -1‘||’연산을 따지게 된다

-1의 값은 참이고 ‘||’은 논리식이 논리합이므로

왼쪽항이 참이면 다음 항은 

계산을 하지 않아도 참이므로 

++y, ++z연산은 수행하지 않는다


따라서 k의 값은 참이 되고 값은 1이 된다.

따라서 1, 0, -1, 1이 출력.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **

'프로그래밍 > C언어' 카테고리의 다른 글

sizeof 연산자  (0) 2018.07.02
단항 증감 연산자  (0) 2018.06.28
단순 대입 연산자  (0) 2018.06.28
비트연산자  (0) 2018.06.28
자료형, 보수와 음수표현  (0) 2018.06.14

단항 증감 연산자


1 값이 증가하거나 감소

단항 연산자가 왼쪽에 붙으면 전위(++A)

단항 연산자가 오른쪽에 붙으면 후위(A++)

전위식은 우선순위가 높으며

후위식은 우선순위가 아주 낮다.

 


++A, A++ 은

 

A += 1 또는, 

A = A + 1 로



--A, A-- 은


A -= 1 또는, 

A = A – 1 


로 설명할 수 있다.


 

int A = 0;

printf("%d\n", ++A);

 

변수 A1의 값을 더하고 

그 값을 출력한다

1의 값이 출력된다.

       


int A = 0;

printf("%d\n", A++);

printf("%d\n", A);

 

변수 A의 초기값을 먼저 출력하고

맨 마지막에 1의 값을 더하여

변수 A에 저장한다.

따라서 01을 출력.


이처럼 후위식은 해당 행의 연산이 끝나고

맨 마지막에 값의 증가가 이루어진다.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **

'프로그래밍 > C언어' 카테고리의 다른 글

sizeof 연산자  (0) 2018.07.02
쇼트서킷(Short-circuit)  (0) 2018.07.02
단순 대입 연산자  (0) 2018.06.28
비트연산자  (0) 2018.06.28
자료형, 보수와 음수표현  (0) 2018.06.14

단순 대입 연산자


A = B

B 혹은 B 들어있는 값을 A 저장

메모리에 정보를 저장하는 .

기존에 저장된 값이 있다면 덮어쓰기가 됨.

대입 연산자의 왼쪽 : l-value(A)

오른쪽 피연산자 : r-value(B)

메모리의 쓰기가 일어남

l-value는 반드시 메모리일 .

 

 

ex) int A = 0;

        A = 3;

 

변수를 선언할 A 0으로 초기화.

그리고 변수 A 정수 3 대입하는 의미.

기존에 있던 0 정보는 지워지고

3 정보로 변경되어 저장됨.    

 

int A = 0 에서의

‘=’ 단순대입연산자가 아니라

변수 선언할 때의 문법상 필요에 의한 .

    비슷한 예로 ‘*’ 곱셈 연산자이지만

변수를 선언할 때는 포인터를 의미.

 



오류 코드들


1) 3 = 4;


정수형 상수 3 상수 4 저장할  없음.

l-value에는 메모리가 위치해야 .

상수는 쓰기가 허용되지 않고

또한 값을 저장할 있는 메모리도 아니다.

 


2) char Name[8];

       Name = 1;


배열의 본질은 주소이고

그 주소는 상수.

따라서 상수에는 값을 저장할 없다.

 

 

3) const : 한정어, 읽기전용화, 상수화


const int Data = 10;

Data = 20;

 

const 선언하면 해당 변수는

정보의 읽기만 있고

다른 정보를 저장할 없게 된다.

변수의 상수화가 .

10 = 20; 이라는 결과를

초래하기 때문에 오류가 발생.

 

int A = 0;

const int Data = 10;

A = Data;

 

변수 Data 상수화 하였지만

데이터의 읽기는 가능하므로

위와 같은 코드는 오류가 아니다.

변수 A 10 정보가 저장됨.

 

 

const 사용하는 이유는

메모리의 확보도 하고

정보의 훼손을 방지하기 위함.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **

'프로그래밍 > C언어' 카테고리의 다른 글

쇼트서킷(Short-circuit)  (0) 2018.07.02
단항 증감 연산자  (0) 2018.06.28
비트연산자  (0) 2018.06.28
자료형, 보수와 음수표현  (0) 2018.06.14
형식 문자열 입출력 함수 ( 스캔셋 ) (3)  (0) 2018.06.07

비트연산자


비트 단위의 정보를 다룰 있는 연산자.

시스템 자체나 네트워크 관련된 프로그램 개발할 사용

특정 위치의 비트가 참인지 거짓인지 확인하거나

값을 변경할 경우에 사용함.

쉬프트연산은 패딩을 동반.

원하는 비트만큼 쉬프트하고 데이터가

기존비트의 크기를 유지해야 한다면 

유실된 비트의 수만큼 새로운 정보가 채워지는데 

이것을 패딩이라 한다.

왼쪽으로 쉬프트를 통해 곱셉 연산을

오른쪽 쉬프트를 통해 나눗셈 연산을 

수행한 결과를 얻을 있음.

 

 

AND : & (값이 모두 1 )

ex) 0x11223344 & 0xFFFF0000 : 11220000

0001 0001 0010 0010 0011 0011 0100 0100

1111 1111 1111 1111 0000 0000 0000 0000

0001 0001 0010 0010 0000 0000 0000 0000

 

OR : | (값이 하나라도 1이라면

ex) 0x11223344 | 0xFFFF0000 : FFFF3344

0001 0001 0010 0010 0011 0011 0100 0100

1111 1111 1111 1111 0000 0000 0000 0000

1111 1111 1111 1111 0011 0011 0100 0100

 

XOR : ^ (값이 서로 다른 경우에 )

ex) 0x11223344 | 0xFFFF0000 : EEDD3344

0001 0001 0010 0010 0011 0011 0100 0100

1111 1111 1111 1111 0000 0000 0000 0000

1110 1110 1101 1101 0011 0011 0100 0100

 

NOT : ~ (값을 반전)

ex) ~0x11223344 : EEDDCCBB

0001 0001 0010 0010 0011 0011 0100 0100

1110 1110 1101 1101 1100 1100 1011 1011

 


<< : 왼쪽으로 쉬프트

ex) 0x00001122 << 8 : 0x00112200

0000 0000 0000 0000 0001 0001 0010 0010

0000 0000 0001 0001 0010 0010 0000 0000


8비트를 왼쪽으로 쉬프트하고 

왼쪽으로 쉬프트 값은 절사되고

오른쪽에 새로 값이 패딩되는데 

값은 0으로 채워진다.

 


>> : 오른쪽으로 쉬프트

ex) 0x00001122 >> 8 : 0x00000011

0000 0000 0000 0000 0001 0001 0010 0010

0000 0000 0000 0000 0000 0000 0001 0001 


8비트를 오른쪽으로 쉬프트하는데

원래 수가 양수이면 0, 음수였으면 1

패딩하는 것이 왼쪽으로 쉬프트와 다른점.

 

-8 >> 3 예를 들어보면

1111 1111 1111 1111 1111 1111 1111 1000

1111 1111 1111 1111 1111 1111 1111 1111



-8을 오른쪽으로 3만큼 쉬프트 하게되면

2 2승까지의 0 정보가 절사되게 되고

-8은 음수이고 부호비트가 1이므로

그 부호를 유지하기 위해서

왼쪽비트부터 1로 채워지게 된다.






** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **

+ Recent posts