본문 바로가기

코딩수강일지/팀스파르타 앱개발 종합반 수업일지

앱개발 종합반 1주차 수강일지

웹개발 강의에 이어서 앱개발 강의까지 수강하게 됐다.

내가 만들어보고 싶었던 앱을 위해 열심히 배워봐야 겠다.

 

Java Script 는 크롬 브라우저 개발자 도구(F12)를 통해 수업

 

참고) 논리연산자


  • 기초문법 1. 변수

- 변수선언 방식

let first_name = 'bob' // snake case라고 합니다.
또는,
let firstName = 'bob' // camel case라고 합니다. 회사마다 규칙이 있죠.
과 같이, 쉽게 알아볼 수 있게 쓰는 게 중요합니다.
다른 특수문자 또는 띄어쓰기는 불가능합니다!


- const 변수 선언(변경할 수 없는 고정값을 만들고 싶을 때)

const value_fix = '값';
value_fix = '변경한 값';

console.log(value_fix) // const로 선언한 변수엔 새로운 값을 재 할당(다시 입력!) 할 수 없습니다.


  • 기초문법 2. 리스트(배열),딕셔너리(객체)

- 리스트 : 순서를 지켜서 가지고 있는 형태

let a_list = []  // 대괄호로 표현

// 또는,

let b_list = [1,2,'hey',3] // 로 선언 가능

b_list[1] // 2 를 출력
b_list[2] // 'hey'를 출력

// 리스트에 요소 넣기
b_list.push('헤이')
b_list // [1, 2, "hey", 3, "헤이"] 를 출력

// 리스트의 길이 구하기
b_list.length // 5를 출력


- 딕셔너리(객체): 키(key)-밸류(value) 값의 묶음

let a_dict = {}  // 중괄호로 표현


// 또는,

let b_dict = {'name':'Bob','age':21} // 로 선언 가능
b_dict['name'] // 'Bob'을 출력
b_dict['age'] // 21을 출력

b_dict['height'] = 180 // 딕셔너리에 키:밸류 넣기
b_dict // {name: "Bob", age: 21, height: 180}을 출력


let b_dict = {'name':'Bob','age':21}

//bob 이름을 꺼낼땐 두 가지 방식으로 값을 꺼낼 수 있습니다.
b_dict['name']
b_dict.name

둘다 똑같이 딕셔너리의 키값에 접근하여 값을 꺼내옵니다.


let Air = {list_count : 25, RESULT  : {CODE: 000 , MESSAGE : "처리되었습니다"}}

딕셔너리 안에 딕셔너리 사용가능


  • 기초문법 3. 함수

*기본제공함수

**예를 들면, 나눗셈의 나머지를 구하고 싶은 경우**

let a = 20
let b = 7

a % b = 6
**또, 모든 알파벳을 대문자로 바꾸고 싶은 경우**

let myname = 'spartacodingclub'

myname.toUpperCase() // SPARTACODINGCLUB
**또, 특정 문자로 문자열을 나누고 싶은 경우 1**

let myemail = 'sparta@gmail.com'

let result = myemail.split('@') // ['sparta','gmail.com']

result[0] // sparta
result[1] // gmail.com

let result2 = result[1].split('.') // ['gmail','com']

result2[0] // gmail -> 우리가 알고 싶었던 것!
result2[1] // com

myemail.split('@')[1].split('.')[0] // gmail -> 간단하게 쓸 수도 있다!

 

* 함수선언

- 기본 형식

// 만들기
function 함수이름(필요한 변수들) {
	내릴 명령들을 순차적으로 작성
}
// 사용하기
함수이름(필요한 변수들);

- 예시

// 두 숫자를 입력받으면 더한 결과를 돌려주는 함수
function sum(num1, num2) {
	console.log('num1: ', num1, ', num2: ', num2);
	
	//return 으로 값을 돌려주는, 뱉는 구조로 변수에 값을 전달 할 수도 있습니다.
	return num1 + num2;
}

sum(3, 5); // 8
sum(4, -1); // 3
let result = sum(10,10)
console.log(result) // 20

- 함수의 원리

const a = 1;
const b = 2;
const sum = a + b;

위 작업을 함수로 변환 했을때 아래 형식으로 나타낼 수 있음

function add(a, b) {
  return a + b;
}

const sum = add(1, 2);
console.log(sum);

- 또다른 표현 방식(리터럴 방식) (function a() 라고 적지 않고 let a = function() 으로 나타낼 수 있음)

let a = function(){
	console.log("리터럴 방식 이라고 합니다");
}

a()


  • 기초문법 4. 조건문, 반복문

- 조건문

function is_adult(age){
	if(age > 20){
		alert('성인이에요')
	} else {
		alert('청소년이에요')
	}
}

is_adult(25)
function is_adult(age){
	if(age > 20){
		alert('성인이에요')
	} else if (age > 10) {
		alert('청소년이에요')
	} else {
		alert('10살 이하!')
	}
}

is_adult(12)

AND , OR 조건

// AND 조건은 이렇게
function is_adult(age, sex){
	if(age > 20 && sex == '여'){
		alert('성인 여성')
	} else if (age > 20 && sex == '남') {
		alert('성인 남성')
	} else {
		alert('청소년이에요')
	}
}

// 참고: OR 조건은 이렇게
function is_adult(age, sex){
	if (age > 65 || age < 10) {
		alert('탑승하실 수 없습니다')
	} else if(age > 20 && sex == '여'){
		alert('성인 여성')
	} else if (age > 20 && sex == '남') {
		alert('성인 남성')
	} else {
		alert('청소년이에요')
	}
}

is_adult(25,'남')

- 반복문

for (let i = 0; i < 100; i++) {
	console.log(i);
}
for (1. 시작조건; 2. 반복조건; 3. 더하기) {
	4. 매번실행
}

1 -> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3
-> 2체크하고 -> (괜찮으면) -> 4 -> 3

와 같은 순서로 실행됩니다.
i가 증가하다가 반복조건에 맞지 않으면, 반복을 종료하고 빠져나옵니다.
  • 그러나 위처럼 숫자를 출력하는 경우보다는, 반복문은 주로 리스트와 함께 쓰입니다.
let people = ['철수','영희','민수','형준','기남','동희']

// 이렇게 하면 리스트의 모든 원소를 한번에 출력할 수 있겠죠?
// i가 1씩 증가하면서, people의 원소를 차례대로 불러올 수 있게 됩니다.
for (let i = 0 ; i < people.length ; i++) {
	console.log(people[i])
}

리스트도 그냥 리스트가 아닙니다! 딕셔너리가 들어간 리스트와 찰떡이죠

let scores = [
	{'name':'철수', 'score':90},
	{'name':'영희', 'score':85},
	{'name':'민수', 'score':70},
  {'name':'형준', 'score':50},
  {'name':'기남', 'score':68},
  {'name':'동희', 'score':30},
]

for (let i = 0 ; i < scores.length ; i++) {
	console.log(scores[i]);
}

// 이렇게 하면 리스트 내의 딕셔너리를 하나씩 출력할 수 있고,
for (let i = 0 ; i < scores.length ; i++) {
	if (scores[i]['score'] < 70) {
		console.log(scores[i]['name']);
	}
}

// 이렇게 하면 점수가 70점 미만인 사람들의 이름만 출력할 수도 있습니다.

참고 : 문자열과 변수를 나란히 적고 싶을 때 사이에 + 기호를 붙여준다

ex) let name = 민수

console.log("이름" + name + "입니다");

 

 

 

 

 

 

 

 

  • 앱개발에 자주 쓰이는 Javascript -1

👉 기존에는 함수를 선언하기 위해서 function 키워드를 사용했습니다. 이를 화살표 함수 (Arrow Function) 문법으로도 선언이 가능합니다.

funtion 대신에 화살표(=>)로 대체  !

[기존 방식]

let a = function() {
  console.log("function");
}
a();

 

* 소괄호() => 중괄호{} 형식 /중괄호 안에 함수가 하나일 경우 중괄호 쓰지 않고 함수명() 으로 대체 가능 ex. ()=>popup()

[최신 방식]

let a = () => {
  console.log("arrow function");
}
a();.

 

let sum = (a, b) => a + b;

=

let sum = function(a, b) {
return a + b;
};

 

👉 딕셔너리 키와 값을 빠르게 꺼내기! - 비구조 할당

 

//객체 
let blog = {
	owner : "noah",
	url : "noahlogs.tistory.com",
	getPost() { 
		console.log("ES6 문법 정리"); 
	}
};

//기존 할당 방식
let owner = blog.owner
let getPost = blog.getPost()

//비구조 할당 방식
let { owner, getPost } = blog;       
//각각 blog 객체의 owner , getPost() 의 데이터가 할당
//blog의 키 값과 이름이 같아야 해요!
//(예 - owner가 아니라 owner2를 넣어보세요! 아무것도 안 들어온답니다.)

**** 앞으로 리액트 네이티브 앱을 만들며 가장 많이 사용할 방식****

//함수에서 비구조 할당 방식으로 전달된 딕셔너리 값 꺼내기
**let blogFunction = ({owner,url,getPost}) => {        *// blog변수의 딕셔너리 값을 가져올때
	console.log(owner)                              따로 변수 만들고 가져올 필요 없이
	console.log(url)                                중괄호 쓰면 변수 선언과 동시에 값을 가져온다.
	console.log(getPost())                  + 화살표함수로 funtion 쓸필요없이 blogfuntion을 함수 선언*
}

blogFunction(blog)**		// blog라는 변수 자체를 함수 값으로 사용 가능

 

 

+ 비구조할당 예시추가

const ironMan = {
  name: '토니 스타크',
  actor: '로버트 다우니 주니어',
  alias: '아이언맨'
};

const captainAmerica = {
  name: '스티븐 로저스',
  actor: '크리스 에반스',
  alias: '캡틴 아메리카'
};

function print(hero) {           //hero 자리에 변수를 입력하면 그에 맞는 변수의 값을 찾아 출력//
  const text = `${hero.alias}(${hero.name}) 역할을 맡은 배우는 ${hero.actor} 입니다.`;
  console.log(text);
}

print(ironMan);
print(captainAmerica);

=

const ironMan = {
  name: '토니 스타크',
  actor: '로버트 다우니 주니어',
  alias: '아이언맨'
};

const captainAmerica = {
  name: '스티븐 로저스',
  actor: '크리스 에반스',
  alias: '캡틴 아메리카'
};

function print(hero) {                 //hero 자리에 변수를 입력하면 그에 맞는 값을 찾아 출력//
  const { alias, name, actor } = hero;
  const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;
  console.log(text);
}

print(ironMan);
print(captainAmerica);

=

const ironMan = {
  name: '토니 스타크',
  actor: '로버트 다우니 주니어',
  alias: '아이언맨'
};

const captainAmerica = {
  name: '스티븐 로저스',
  actor: '크리스 에반스',
  alias: '캡틴 아메리카'
};

function print({ alias, name, actor }) {
  const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;
  console.log(text);
}

print(ironMan);
print(captainAmerica);

function print(hero) {
  const text = `${hero.alias}(${hero.name}) 역할을 맡은 배우는 ${hero.actor} 입니다.`;

 

function print(hero) {
  const { alias, name, actor } = hero;
  const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;

 

function print({ alias, name, actor }) {
  const text = `${alias}(${name}) 역할을 맡은 배우는 ${actor} 입니다.`;

 

모두 같은 문장이며 객체(딕셔너리)의 키 값을 빠르게 꺼내고 싶을때 중괄호를 사용해 비구조할당(=객체구조분해)

형식으로 간단하게 표현 가능


  • 앱개발에 자주 쓰이는 Javascript -2

👉 자바스크립트 안에서 줄바꿈을 자유롭게! - 리터럴

느낌표 옆에 있는 키인 백틱 ( ` ) 을 이용하여 문자열을 + 기호 없이 간단히 처리할 수 있습니다. 또한 백틱 ( ` ) 안에서는 여러 줄의 줄바꿈도 자유롭게 사용 가능합니다.

const id = "myId" ;
const url = `http://noahlog.tistory.com/login/${id}` ;

const message = "줄바꿈을 하려면 \\n 이 기호를 써야 했죠!"

const message = ` 줄바꿈도 마음대로
사용이 가능합니다. ` 

👉 딕셔너리를 짧게 만들어보기! - 객체 리터럴

[기존 방식]

var name = "스파르타";
var job = "developer";

var user = {
  name: name,
  job: job
}

console.log(user);
//{name: "스파르타", job: "developer"}

[최신 방식]

var name = "스파르타";
var job = "developer";

var user = {
  name,
  job
}

console.log(user);
//{name: "스파르타", job: "developer"}

객체(딕셔너리)에서 키와 값의 명칭이 같다면 한번만 써도 된다.

 

 

  • 앱개발에 자주 쓰이는 Javascript -3

👉 map 함수사용 - 리스트의 길이값을 몰라도 되며, 변수안의 값과 몇번째에 있는 값인지 까지 나타내 줌

* 기본 형식

arr.map(callback(currentValue[, index[, array]])[, thisArg])

 

기존 for 반복문

let numbers = [1,2,3,4,5,6,7];
for(let i=0; i<numbers.length; i++){
	console.log(numbers[i]);
}

-> for문은 앱개발에서 잘 안쓰임

 

👉 for문은 리스트의 길이 값을 알아야 했습니다.

map은 리스트의 길이값을 몰라도 되며, for와는 반대로 리스트안에서 몇 번째에 있는 값인지 순서를 알려줍니다.

let numbers = [1,2,3,4,5,6,7];

numbers.map((value,i) => {           //그냥 value변수에 리스트가 순서대로 저장됨
	console.log(value,i) 
})

// 아래와 같다는 점! 눈치 채셨나요?

numbers.map(function(value,i) {
    console.log(value,i)
})

//1 0
//2 1
//3 2
//4 3
//5 4
//6 5
//7 6

 

+ filter 함수

기본형

arr.filter(callback(element[, index[, array]])[, thisArg])

-> 리스트를 순회하며 조건 확인 후 조건을 만족하는 값들로 구성된 새로운 리스트를 리턴함

arr 자리에 변수명입력

 

참고)

let numbers = [1, 4, 9]
let parameters = numbers.filter((num, index, arr) =>
          	{console.log(num, index, arr)})
// 결과
1 0 [ 1, 4, 9 ]
4 1 [ 1, 4, 9 ]
9 2 [ 1, 4, 9 ]

 

(num자리) element : 처리할 현재 요소(값),

index (Optional) : 처리할 현재 요소의 인덱스(배열 번호),

array (Optional) : filter를 호출한 배열.

 

숙제 : filter 함수로 '포도'만 들어 있는 podo_list 리스트 구현해보기

▼내가한것 

let fruit_list = ['사과','감','감','배','포도','포도','딸기',
'포도','감','수박','딸기']
function fruit(value) {
  return value == '포도';
}
let podo_list = fruit_list.filter(fruit);
console.log(podo_list);

-> filter 함수의 element 자리에 fruit 라는 함수를 따로 만들어 집어넣고 그 함수의 조건에 맞는 list만 출력되게 만듬

 

 

▼답안

let fruit_list = ['사과','감','감','배','포도','포도','딸기',
'포도','감','수박','딸기']

let podo_list = fruit_list.filter((f)=>{
	return f == '포도'
})

console.log(podo_list) //['포도','포도','포도']

 

-> fruit_list.filter((f) f에 fruit_list의 요소들이 하나씩 담기게 되고

f가 포도면 podo_list에 새로 만들어진 리스트를 저장(훨씬 깔끔함)

 

 

참고) if(f == "딸기") count += 1   

-> if뒤에 한줄이면 중괄호 없이 사용가능