iOS, 안드로이드OS 등 각 OS에 맞는 언어로 앱을 개발하는 것을 말한다. 스마트폰에 설치하는 앱은 고객이 자신이 원하는 것만 골라 설치한다는 점에서 일종의 ‘러브마크’라고 할 수 있다.
[네이버 지식백과] Native App 네이티브 앱 (지형 공간정보체계 용어사전, 이강원, 손호웅)
기본 기능은 HTML 등의 웹 문서로 구현하고, 패키징은 아이폰, 안드로이드 등 모바일 운영 체제(OS)별로 구현하는 앱.
먼저 HTML, 종속 스타일 시트(CSS: Cascading Style Sheets), 자바스크립트(JavaScript) 등 웹 표준 기술을 사용하여 웹 페이지를 구현하고, 안드로이드(Android)나 아이폰(iOS) 개발 환경에서 웹 브라우저로 해당 웹 페이지들을 로딩하여 OS 환경에 맞게 빌드(build)하여 만든다.
[네이버 지식백과] 하이브리드 앱 [Hybrid mobile application] (IT용어사전, 한국정보통신기술협회)
소프트웨어나 하드웨어 등이 다른 환경의 OS에서 공통으로 사용되는 것.
예를 들면 1개 기종의 하드웨어가 워크스테이션 또는 PC에서 사용되거나, 유닉스 시스템이나 윈도즈, 맥 OS 등의 복수 환경에서 사용되는 것을 말한다.
[네이버 지식백과] 크로스 플랫폼 [cross platform] (IT용어사전, 한국정보통신기술협회)
리액트(React.js)
라이브러리/프레임워크 기반으로 앱을 제작하는 기술자바스크립트
로 개발 가능 (js = javascript 줄임말)웹 페이지에서 사용자로부터 특정 이벤트나 입력 값을 받아 동적인 처리를 목적으로 고안된 객체 기반의 스크립트 프로그래밍 언어.
사용자 경험을 향상시키기 위한 방법으로 주로 사용된다. 일반적으로 HTML 문서에 내재되며, 브라우저에서 실행된다.
[네이버 지식백과] 자바스크립트 [JavaScript] (IT용어사전, 한국정보통신기술협회)
💻 크롬 개발자도구 콘솔을 사용하여 공부! (엔터 치기 불편..)
세미콜론(;)
을 써도 되고 안 써도 됨!let num = 1;
let num = 1
let
을 써야 할까 var
을 써야 할까?let
은 재선언 불가능, var
은 재선언 가능console.log(변수)
: 콘솔 창에 괄호 안의 값을 출력console.log("Hello World!");
let
으로 변수 선언let num = 20
num = 'Bob'
// 변수는 값을 저장하는 박스
// 한 번 선언했으면, 다시 선언하지 않고 값을 넣을 수 있음
let a = 1
let b = 2
a+b // 3
a/b // 0.5
let first = 'Bob'
let last = 'Lee'
first+last // 'BobLee'
first+' '+last // 'Bob Lee'
first+a // Bob1 -> 문자+숫자를 하면, 숫자를 문자로 바꾼 뒤 수행합니다.
snake case
camel case
let first_name = 'bob' // snake case
let firstName = 'bob' // camel case
const
로 변수 선언let value_box = '값'
value_box = '변경한 값';
console.log(value_box) // 콘솔엔 '변경한 값'이 찍힙니다.
const value_fix = '값';
value_fix = '변경한 값';
console.log(value_fix) // 에러 발생, const로 선언한 변수에는 새로운 값을 재할당할 수 없음
배열(array)
라고도 함[]
안에 변수 넣을 수 있음.push
: 리스트에 요소 넣기.length
: 리스트의 길이 구하기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}을 출력
names = [{'name':'bob','age':20},{'name':'carry','age':38}]
// names[0]['name']의 값은? 'bob'
// names[1]['name']의 값은? 'carry'
new_name = {'name':'john','age':7}
names.push(new_name)
// names의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
// names[2]['name']의 값은? 'john'
JSON 데이터 구조
: 리스트와 딕셔너리가 복합적으로 존재하는 데이터 구조웹과 컴퓨터 프로그램에서 용량이 적은 데이터를 교환하기 위해 데이터 객체를 속성 · 값의 쌍 형태로 표현하는 형식.
[네이버 지식백과] 제이슨 [JavaScript Object Notation] (IT용어사전, 한국정보통신기술협회)
💻 크롬에서는 JSONView
확장 프로그램으로 가독성 높일 수 있음
let b_dict = {'name':'Bob','age':21}
// bob 이름을 꺼낼 땐 두 가지 방식으로 값을 꺼낼 수 있음
b_dict['name']
b_dict.name
// 둘다 똑같이 딕셔너리의 키값에 접근하여 값을 꺼내 옴
순서
를 표시할 수 있고, 정보
를 묶을 수 있음변수
만 사용했을 때let customer_1_name = '김스파';
let customer_1_phone = '010-1234-1234';
let customer_2_name = '박르탄';
let customer_2_phone = '010-4321-4321';
👉 알아보기 힘듦
딕셔너리
를 활용했을 때let customer_1 = {'name': '김스파', 'phone': '010-1234-1234'};
let customer_2 = {'name': '박르탄', 'phone': '010-4321-4321'};
👉 고객 별로 정보 묶기 가능
리스트
도 활용했을 때let customer = [
{'name': '김스파', 'phone': '010-1234-1234'},
{'name': '박르탄', 'phone': '010-4321-4321'}
]
👉 순서 나타내기 가능, 고객이 새로 한 명 더 오더라도 .push
함수를 이용해 간단하게 추가 가능
%
let a = 20
let b = 7
a % b // 6
.toUpperCase()
let myname = 'ramji'
myname.toUpperCase() // RAMJI
💡 소문자는 .toLowerCase()
함수 사용
.split()
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 -> 간단하게 쓸 수도 있다!
let txt = '서울시-마포구-망원동'
let names = txt.split('-'); // ['서울시','마포구','망원동']
.join()
let result = names.join('>'); // '서울시>마포구>망원동' (즉, 문자열 바꾸기!)
// 만들기
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
let a = function(){
console.log("리터럴 방식 이라고 합니다");
}
a()
if
, else if
, else
function is_adult(age){
if(age > 20){
alert('성인이에요') // alert은 경고창
} else if (age > 10) {
alert('청소년이에요')
} else {
alert('10살 이하!')
}
}
is_adult(12)
AND
조건, OR
조건// AND 조건
function is_adult(age, sex){
if(age > 20 && sex == '여'){ // 나이가 20초과이면서, 여자
alert('성인 여성')
} else if (age > 20 && sex == '남') { // 나이가 20초과이면서, 남자
alert('성인 남성')
} else { // 나머지
alert('청소년이에요')
}
}
// OR 조건
function is_adult(age, sex){
if (age > 65 || age < 10) { // 나이가 65보다 크거나, 10보다 작은 경우
alert('탑승하실 수 없습니다')
} else if(age > 20 && sex == '여'){
alert('성인 여성')
} else if (age > 20 && sex == '남') {
alert('성인 남성')
} else {
alert('청소년이에요')
}
}
is_adult(25,'남')
for
for (1. 시작조건; 2. 반복조건; 3. 더하기) {
4. 매번실행
}
for (let i = 0; i < 100; i++) {
console.log(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]);
}
// 점수가 70점 미만인 사람들의 이름만 출력
for (let i = 0 ; i < scores.length ; i++) {
if (scores[i]['score'] < 70) {
console.log(scores[i]['name']);
}
}
let a = funciton() {
console.log("function");
}
a();
let a = () => {
console.log("arrow function");
}
a();
// 객체(=딕셔너리)
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}) => {
console.log(owner)
console.log(url)
console.log(getPost())
}
blogFunction(blog)**
백틱()
사용const id = "myId" ;
const url = `http://noahlog.tistory.com/login/${id}` ;
// 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"}
👉 key: value
형태에서 단순히 변수명만 작성해주면 변수명과 동일한 필드가 생성되며, 그 변수값이 대입된다.
순서
를 알려줌let numbers = [1,2,3,4,5,6,7];
numbers.map((value,i) => {
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
export
: 자바스크립트의 값, 함수, 딕셔너리(객체) 또는 자바스크립트 파일 자체를 외부로 내보내는 키워드import
: 반대로 자바스크립트 파일 안으로 가져오는 키워드util.js
파일// times, plusTwo 함수를 외부로 내보낼 준비
export function times(x) {
return x * x;
}
export function plusTwo(number) {
return number + 2;
}
index.js
파일에서 util.js
에서 내보낸 함수 사용import { times, plusTwo } from './util.js';
console.log(times(2));
console.log(plusTwo(3));
export default
로 선언한 함수// in util.js
export default function times(x) {
return x * x;
}
// in app.js
// 작성된 함수 이름은 times지만 가지고 올 때는 k로 가져옴
import k from './util.js';
console.log(k(4)); // returns 16
👉 export default
로 선언한 함수는 해당 파일에서 유일해야 하며, 가져올 땐 이름을 다르게 가져와서 사용할 수 있음
let fruit_list = ['사과','감','감','배','포도','포도','딸기',
'포도','감','수박','딸기']
map
함수 사용하기let fruit_list = ['사과','감','감','배','포도','포도','딸기','포도','감','수박','딸기']
let count = 0;
fruit_list.map((fruit) => {
if(fruit == '딸기') count++;
})
console.log(count); // 2
let fruit_list = ['사과','감','감','배','포도','포도','딸기','포도','감','수박','딸기']
let count = 0;
fruit_list.map((f)=>{
if(f == "딸기") count += 1
})
console.log(count)
function checkEmail(email){
...
}
checkEmail('gunhee21@gmail.com') // 이메일이 맞습니다
checkEmail('gunhee21$gmail.com') // 이메일이 아닙니다.
indexOf
사용해보기정규 표현식
사용해보기//indexOf 사용
function checkEmail(email) {
if(email.indexOf('@') != -1)
console.log("이메일이 맞습니다.");
else
console.log("이메일이 아닙니다.");
}
checkEmail("ramji22@gmail.com") // 이메일이 맞습니다.
checkEmail("ramji22$gmail.com") // 이메일이 아닙니다.
// 자바스크립트 이메일 정규표현식 사용
function checkEmail(email) {
var regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if (email.match(regExp) != null)
console.log("이메일이 맞습니다.");
else
console.log("이메일이 아닙니다.");
}
checkEmail("ramji22@gmail.com") // 이메일이 맞습니다.
checkEmail("ramji22$gmail.com") // 이메일이 아닙니다.
indexOf
사용function checkEmail(email){
if(email.indexOf('@') < 0){
console.log("이메일이 아닙니다");
}else{
console.log("이메일이 맞습니다");
}
}
checkEmail('gunhee21@gmail.com') // 이메일이 맞습니다
checkEmail('gunhee21$gmail.com') // 이메일이 아닙니다.
정규식
사용@
가 이메일에 있는지 없는지를 판별하면서, 동시에 @
기준으로 앞뒤에 특수문자가 들어가면 이메일이 아님을 알려줌function checkEmail(email){
//이메일 정규식
var emailRule = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(!emailRule.test(email)){
console.log("이메일이 아닙니다");
}else{
console.log("이메일이 맞습니다");
}
}
checkEmail("gunhee21@gmail.com");
checkEmail("gunhee21#gmail.com");
.com
이 없는 경우 판별function email_check( email ) {
var regex=/([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
return (email != '' && email != 'undefined' && regex.test(email));
}
console.log(email_check('gunhee21@gmail'))
📌이 포스팅의 모든 자료의 출처와 저작권은 SpartaCodingClub 강의에 있습니다.📌