제가 그린거 아님

 

 

console.log( ) 함수를 살펴보면 자연스럽게 () 안에 값들을 넣고 있었다. 그 값을 파라미터(매개변수)라고 한다.

매개변수 내에서 변수처럼 이용할 수 있다.

 

function  함수이름(파라미터) {

console.log(파라미터) 

}



함수이름(값)        --> 함수 호출

             

함수 호출 할 때, 소괄호 입력한 값(Argument)이 파라미터에 전달되는 개념

 

**Argument와 Parameter는 헷갈리면 안 된다**

함수를 호출하는 부분에서 파라미터로 전달하는 값이 Argument

함수 선언 부분에서 소괄호에 작성되는 것이 Parameter 다.

 

예시

 

function welcomecode(Kick,Gwagon) {
  console.log ('여기에 ' + Kick + ' 다음')
  console.log ('와따머고 ' + Gwagon + ' 다음다음')
}


welcomecode('여기에','떠나야해')
실행 결과
여기에 여기에 다음
와따머고 떠나야해 다음다음

 

function welcomecode(x, y) {
console.log ( x * y )
}


welcomecode(2, 4)
8

 

function hello(name) {
 console.log(`my name is ${name!}`);
}

hello()

위와 같이 Argument에 아무 값도 입력해주지 않으면,

my name is undefined 값이 출력된다.

 

그런데 이때 파라미터에 할당 연산자를 활용하여 기본 값을 작성하게 되면 Argument를 작성하지 않아도 동작한다.

function hello(name = `tae`) {
 console.log(`my name is ${name!}`);
}

hello()

출력 값은 my name is tae! 가 된다.

 

 

 function defaultTest(x, y = x + 3){ 
 console.log(`x: ${x}`);
 console.log(`y: ${y}`);
 };
 
 defaultTest(5,)

위와 같이 Argument에 x값만 전달할 경우.

</> 실행 결과
x: 5
y: 8

y값에 x값이 대입 해져서   결과적으로 5+3이 되어 y값은 8이 되며.

Argument에 y값도 전달할 경우 

</> 실행 결과
x: 5
y: 3

그대로 y값이 전달된다.

'Javascript 이론' 카테고리의 다른 글

Javascript Promise 문법 정리  (0) 2023.04.13
Module  (0) 2023.04.13
Falsy 값과 Truthy 값은 무엇일까?  (0) 2022.08.01
Boolean 불 대수에 대해 알아보자!  (0) 2022.08.01
이벤트 핸들러(Event Handler) 써보자!  (0) 2022.07.29

 

---------------------------------------------------

Falsy 값의 종류

False

Null

undefined

NaN

0

''

---------------------------------------------------

Truthy 값의 종류

[]

{}

---------------------------------------------------

예제

if (0) {
  console.log('I love JavaScript! :')
} else {
  console.log('I hate JavaScript')
}

답 : 0은  Falsy 값이니 else값이 출력되겠죠?후훗

 

AND 연산자일 경우에는

 

console.log('love' && 'Javascript')

위의 예시인 경우, 'Javascript'가 출력 된다.

&&의 경우 왼쪽 값이 Truthy인 경우 오른쪽 출력

||의 경우 왼쪽 값이 Truthy 인 경우 왼쪽 출력으로 외워보세요!

 

 

외우셨나요? 이제 문제 갑니다 😎

 

1    console.log('String' && 123);

2    console.log({} || []);

3    console.log(0 && false);

4    console.log(null || undefined);

5    console.log(NaN && 'Codeit');

6    console.log('' || true);

7    console.log('JavaScript' && null);

8    console.log(3000 || undefined); 

 

 

1번:  'String'이 truthy 값, && = 123

2번:  {}이 Truthy , ||  = {}

3번:  0이 falsy 값, && = 0

4번:  null이 falsy 값,|| = undefined

5번: NaN이 falsy 값,&& = NaN

6번 ''이 falsy 값,|| = ''

7번 'Javascript가 truthy값,&& = null 

8번 3000이 truthy값,|| = 3000

 

 

 

1    console.log('codeit' && undefined && null);

2    console.log('codeit' || false || null);

3    console.log('codeit' && 123 || null);

4    console.log('codeit' || 123 && true);

왼쪽부터 차례대로 계산하나, ||와 &&가  같이 있을땐 && 가 우선,

 

1번 : 'codeit' && undefined 에서 'codeit'이 truthy값이니 undefined 이고, undefined와 null이 &&이니 undefined

2번 : 'codeit' || false 에서 'codeit'이 truthy값이니 codeit이고, null과 하면 truthy값 => codeit

3번 : 'codeit과 123 &&이니깐 123, null에 ||이니까 123

4번 : 123과 true  &&니까 true, 'codeit'과 하면 codeit 

 

 

 

 

George Boole 1815년 &nbsp; 11월 2일 & 1864년 &nbsp; 12월 8일 영국의 수학자

George Boole 이름을 따서  만들어진 불 대수(Boolean algebra)가 있다. 수학자라는 부분이 참 인상 깊다.

 

불 대수는 JavaScript에서도 활용 되고 있으며, 현재 많은 언어들이 사용하고 있다!

 

그럼 불 대수에 대해 조금 더 알아보자.

①.불 대수의 특징

 

1.숫자 값은 진리 값이다. 진리 값은 어떤 값이 True인지 False 인지 나타낸다.

2.AND, OR, NOT로 표현 한다. 

3.명제가 필요 하다.

여기서  명제란? "True 또는 False가 확실한 '문장'"    

 

대한민국의 수도는 서울 이다. -----> 참인 명제

10은 5보다 작다 -----> 거짓 명제

한국의 수도는 어디입니까?  -----> 명제가 아님

짜장면 보다 짬뽕이 맛있다. -----> 주관적인 표현,명제가 아님 (개인적으로 짬뽕)

 

AND 연산x와 y가 모두 참일 때만  B가 참으로 변한다.

 

x         l    y             l    B

true     l   false        l   False

false    l   true         l    False

true     l   true         l  true 

 

OR 연산

 

x와 y 중 하나가 참 일때 B가 참으로 변한다

x        l      y     l    B     l

false  l   true    l  true   l

true   l  false   l  true    l

false l  false     l false   l 

 

ex) 대한민국의 수도는 제주도거나 부산이다.

둘 다 아니기 때문에 false

 

 

NOT 연산 

참이면 거짓

거짓이면 참으로 만들어 준다

 

대한민국의 수도는 서울 이다.

사실 이기 때문에 false 이다.

 

 

Javascript에서 Event Handler란 일상생활에서 비유해 보자면, 음.. 보통 운전을 할 때, Handle을 통해서 차를 조종하지 않는가? 그런 것처럼, 언어에서도 조종하는 것이 있다!  여기서는 HTML을 조종할 수 있다고 생각하면 된다.

Button을 눌렀을 때, 클릭 이벤트가 나오게 한다 던가, 에러 처리를 할 수 있다 던가, 조금 더 나아가면 비동기 처리 등 다양한 작업들을 조종할 수 있다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>JS with Codeit</title>
</head>
<body>
  <div id="content" class="btns">
    <button id="myBtn">JS Click!</button>
    <button onclick="console.log('Hello Codeit!')">HTML Click!</button>
  </div>
  <script src="index.js"></script>
</body>

</html>

Id 가 myBtn인 값을  Js파일로 옮겨서 해보자.

 

let btn = document.querySelector('#myBtn');



function eventgood() {
 console.log('Hi taeyoung')
 }
 
 btn.addEventListener('click', eventgood)

위의 코드를 설명 해보자면, myBtn인 아이디 값을 Btn "변수"라는 바구니에 담았다. 이제, 기능을 만들어서, 'Hi taeyoun'을 나오게 하는 기능을 만들어주고, btn을 '클릭'하면 그 기능이 나오게 해주는 것이다. 이제 button을 클릭할 때마다, 'Hi taeyoung'이 콘솔 창에 찍힌다. 정말 멋지지 않은가?😊

let inMyBackPack = ['cash','cuplamen','notebook','battery','Ipad']

for ( let tae in inMyBackPack) {
console.log(inMyBackPack[tae])
}

위의 코드 처럼 반복문을 쓰면, 아주 편하게 내가 가진 것들을 출력 할 수 있다!

inMyBackPack을 tae이라는 가방에 담는다고 보면 된다.

 

 

for (let i = 0; i < 5; i++) {
    console.log(i);
}

이렇게 하면 i가 0이고 i가 5만큼 증가한다. 

 

반복문은 한번 배우고 나면, 개발할 때 두고두고 써먹는 아주 유용한 친구이다.

 

이 배열들을 모두 출력 하고 싶을 때,

console.log(inMyBackPack[0])

console.log(inMyBackPack[1])

console.log(inMyBackPack[2])

console.log(inMyBackPack[3])

console.log(inMyBackPack[4])

console.log(inMyBackPack[5])   이렇게 해도 되지만, 코드의 줄 갯수가 너무 늘어나니까 반복문을 하는게 좋다.

 

 

 

Object-oriented programming (줄여서 OOP)

 

문득 Javascript를 하다가 OOP가 자주 쓰이길 래, 무슨 말인지 몰라서 검색을 했다.

OOP는 프로그래밍을 한다는 사람이면 누구나 한 번쯤은 들어 봤으나, 추상적으로 다가 왔을 것이다.

Wikipedia에서 이렇게 설명하고 있지만, 쉽게 이해하지 못하는 사람도 더러 있을 것이다.(나 포함..)

객체 지향(객체 지향, 영어: object-oriented)은 소프트웨어 설계와 프로그램 기술에 사용되는 사고방식이다. 원래는 특정 프로그래밍 패러다임을 설명하기 위해 고안된 말이었다. object-oriented programming과 같이 수식어로서 사용되는 것이 보통이며, 그것 단독으로 취급되는 일은 없는 막연한 설계 구상이기도 하다.
참고: Wikipedia

나 머리 나쁜 것..확인...🤣

 

이해가 안되어서 인터넷을 좀 더 뒤져보았다.

 

듣자하니 객체 지향이 탄생하게 된 계기는  컴퓨터 프로그래밍 기술 및 컴퓨터 발전이 급속도로 진행되는 가운데 탄생되었다고 한다. 객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화(시스템, 모듈 등으로부터 "핵심적인 개념"을 간추려 내는 것) 시켜 그 데이터를 가진 객체 간의 상호작용을 일으키는 것이다. 

 

객체 지향의 구체적인 예로는 '자동차'로 이해할 수 있다.

자동차의 면허가 있는 사람이라면, 자동차의 기본적인 조작 방법은 알고 있고, 실제로 운전할 수 있을 것이다.(장롱면허 아닙니다.)

하나, 차의 면허를 가지고 있는 사람 전부가 차가 움직이는 구조를 알고 있는 것은 아닐 것..(그래도 운전이 되는 추상화 개념 갓갓.. 군대에 있을 때 운전병들은 제외..(진짜.. 차 내부 정비 핵 잘하더라구요...운전도 잘 하고..  운전병,부사관,장교님들 존경합니다.))

 

오히려 나처럼 자동차 구조와 같은 기계적 지식을 갖고 있지 않은 사람들이 더 많을 것이다.

이것은 무엇을 말하냐면, 자동차를 운전하는 데 차의 구조와 구조를 이해할 필요가 없다는 것이다. 몰라도 운전은 할 수 있다. 즉 자동차라고 하는 "물건"과, 차의 조작이라고 하는 "역할"을 나누어 생각하고 있는 것으로, 이 생각이 바로 OOP라고 할 수 있다.

 

객체 지향의 개념을 이해하기 위해서는 객체 지향과 관련된 의미를 파악하는 것이 중요하다.

 

클래스 : 프로그래밍은 설계도나 틀을 바탕으로 개발이 이루어지는 것으로, 이것은 객체 지향 프로그래밍에서도 동일하다.

무엇보다, 객체 지향의 프로그래밍에 사용하는 각각의 물건의 설계도를 클래스라고 한다.

클래스는 객체의 속성(데이터)과 메서드(동작, Activity)를 "정의"한다. <- 아직 설계도 일 뿐.

 

Object : "물건"이라는 의미이다. 프로그래밍에서는 데이터와 처리의 집합체라고 설명할 수 있다.

예를 들어, 야구 선수라는 오브젝트에는, 이름, 연령, 신장, 체중(속성)이라고 하는 데이터 외에

던지기, 달리기,라고 하는 처리(메서드)가 포함되어 있다.  즉, 객체에는 클래스에서 명사(속성) 외에도 동사(메서드) Activity에서 "정의" 한 것을 "구체화"한다. <-이렇게 생각하니 필자는 이해가 매우 쉬웠다.

 

캡슐화 : 객체의 상태를 외부에서 접근 못하게 막는 것.(일단 이정도로만 알고 캡슐화에 대한 세부 포스트 내용을 참고 하는 것이 좋다)

 

메서드: 메서드란, Object가 가지고 있는 처리를 말한다. 야구 선수라고 하는 오브젝트로 말하면, 

던진다, 잡는다, 친다, 달린다, 점프한다, 등 오브젝트가 "액션"을 일으키는 처리 다.

 

상속 : 객체 지향으로 개발된 물건에는 재이용하기 쉽다는 특징이 있다. 특히 클래스를 다른 제품 개발에

서 재사용하는 경우, 이를 "상속"이라고 한다.

 

다형성: 파트 마다 개발된 물건 은, 최종적으로는 각 파트가 연동하게 될 필요가 있다. 모든 파트가 하나의 지시로,

미리 정한 동작을 하는 구조를 만드는 것을 다형성이라고 한다. 어떤 하나의 변수명이나 함수명이 상황에 따라서 다르게 해석될 수 있는 것을 의미한다. 다형성은 어떤 한 가지 기능을 의미하는 것이 아니라 개념이기 때문에 여러 가지 방법으로 표현할 수 있다.

 

이 개념들은 필자가 각각의 개념들을 다시 알기 쉽게 정리해서 포스트 하였다. 중요한 개념이니 꼭 참고 해두었으면 한다!

 


객체 지향의 장점

 

1. 사용자 정의가 쉽고 유연한 대처가 가능하다.

객체 지향하에 프로그래밍을 하면 완성품에는 커스터마이즈가 쉬어진다는 장점이 있다. 사양 변경, 업데이트 등

유연하게 대응할 수 있는 것도 객체 지향의 큰 장점이라고 할 수 있다.

 

2. 작업자 간의 공유가 쉬워진다.

오브젝트 지향에 근거에 행해지는 개발에서는, 다수의 파트에 의해 구성되는 것을 세부에 이르기까지 작업자가

이해하면서 작업을 진행해 간다. 개별 작업자의 클래스에 대한 이해도가 높으면 작업자 간의 공유가 쉬워져

부드러운 작업으로 이어진다.

 

3. 재사용이 쉽고, 개발 작업의 효율화를 도모할 수 있다.

객체 지향으로 개발된 제품 또는 클래스는 재사용하기 쉽다는 장점이 있다. 이를 통해 기존 제품과 구조가

기본적으로 동일한 제품을 만드는 경우 개발 시간을 대폭 감소시킬 수 있다.

 

객체 지향의 단점

 

1. 이해하기 어렵다.

작업 방식이 아니라 개념인 객체 지향을 이해하는 것은 쉽지 않다. 이 점이 객체 지향의 가장 큰 단점이다.

 

2. 처음부터 개발할 때 코드가 복잡해지기 쉽다.

객체 지향에는 재사용이 쉽다는 장점이 있는 반면,  처음부터 개발하는 경우는 코드가 복잡해지기 쉽다는 단점도 있다.

따라서 재사용에 적합한 기성품이 없는 경우 많은 시간을 소비하게 된다. 

 

 

 

 

 

 

 

 

 

 

 

 

절차적 지향 프로그래밍(Procedural Programing)

 

개념: 절차적 지향 프로그래밍은 명령형 프로그래밍(Imperative Programing(컴퓨터가 수행할 명령들을 "순서대로" 써 놓은 것(예를 들어 요리법, 점검표 같은)))의 일종이다.

개발자 눈에는 보이지는 않는다.. 그래도 핵심은 순서대로 다!

 

탄생 시기 - 1950년대 중반 (우리 아빠 보다 나이가 많다.... 진짜 그때의 개발자분들은 대단하신 것 같다... 존경합니다..!)

대표적인 언어- C언어, COBOL, Perl이 있다.

절차적 지향 프로그래밍은 단순히 순서적인 명령 수행이 아니라 루틴, 서브루틴, 메서드, 함수 -> 프로시저를  이용한 프로그래밍 패러다임을 뜻한다. 즉 연속적인 계산 과정들을 포함하고 있다.

 

절차적 지향 프로그래밍은 프로시저를 이용해 코드의 재활용성이 높으며, 프로시저 콜을 통해 흐름을 쉽게 볼 수 있어서

코드의 가독성이 높아지며 "모듈화" 할 수도 있고 "구조화"를 할 수도 있다.

하지만, 단점으로는 인자를 "전달"하는 경우 적어도 인자의 개수만큼의 메모리 접근을 추가적으로 필요로 하고, 프로시저를 호출할 때 코드를 쓰는 것보다 시간이 매우 많이 소요된다.

 

                           -절차적 지향 프로그래밍 언어와 객체 지향 언어의 차이-

절차적 지향  프로그래밍 언어와 객체 지향 언어의 차이점을 간략하게 설명하자면
절차적 지향 프로그래밍 언어는 「심플하고 알기 쉬운 구조」의 반면, 객체 지향 언어는 「추상적이고 구조가 이미지 하기 어렵다」는 것이다. 절차적 지향  프로그래밍 언어는 프로그램을 실행해야 할 명령을 순서에 따라 기술해 가는 것으로 구성된다.  아래의 표는  정리한 표이다..! 

 

학습비용 절차적 win 코드가 읽기 쉬운 절차적 win 보수성 객체 win 재사용 객체 win 2:2 무승부

 

다음 글을 통해 객체 지향 프로그래밍에 대해 더 세부적으로 알아보자!!

 

자바스크립트의 객체란?
 

'값 또는 기능을 가지고 있는 데이터'이다.

 

이것을 자바스크립트엔 매우 당연한 일이라.
"자바스크립트의 모든 것이 다 객체다!"라는 말이 있을 정도로 모든 문법에 녹아 있다.

 


객체를 만드는 법을 알아볼까? 중요한 개념이니 가 보자구~😍


객체는 {}로 만들 수 있다. {} 안에는 여러 가지 다양한 값들을 , (쉼표)로 통해 저장할 수 있다.
{} 안에는 다양한 값들이 들어가기 위해 명확하게 하기 위해
이름을 정해줘야 한다.

{
 brandName: 'Taeyoungcoding',   
 bornYear: 1995,
 isVeryNice: true,
 worstCourse: null
}


위의 'Taeyoungcoding',1995, true, null 값들은 "Value"라고 부르고
값의 이름들은 "Key"라고 부른다.

키 1개의 값과 value 1개 값을 합친 것 ex) brandName: 'Taeyoungcoding'을
속성(Property)라고 하며, 속성 왼편을 Property Name, 오른편을 Property
Value라고 한다.

 

 -주의 사항-


1. Property Name을 지을 때는 첫 번째 글자는 반드시 문자, 밑줄(_), 달러 기호($) 중 하나로 시작한다.
2. 띄어쓰기 금지.
3. 하이픈(-) 금지.

 

+ Recent posts