본문 바로가기

Full Stack 교육 회고록

11/23 - kotlin, 안드로이드 스튜디오, node.js

728x90
SMALL

Kotlin

<ex01람다식>

package ex20221123

fun main() {

    // 람다 대수
    // 수학 : 이름이 없는 함수
    //        두 개 이상의 수를 1개의 결과값을 단순화
    // 프로그래밍: 다른 함수의 인자로 넘기는 함수(매개변수)
    //            함수의 결과값으로 반환하는 함수(리턴값)
    //            변수에 저장하는 함수를 의미 ***

    // 매개변수 -> 리턴값
    {x:Int, y:Int -> x+y}
    // 더하기 기능을 필요할 때마다 사용하려면 어딘가에 저장 : 변수
    // 1. 람다식의 매개변수에 자료형이 지정되어 있다면 변수에서 자료형은 생략 할 수 있다
    // 2. 변수의 매개변수 자료형이 지정되어 있다면 람다식의 매개변수 자료형은 생략 가능하다
    val sum:(Int, Int) -> Int = {x, y -> x+y}
    println(sum(3,4))
    // 단, 람다식과 변수의 자료형을 둘 다 생략해버리면 추론이 불가능

    //hello라는 변수에 아래 함수를 람다식으로 담아주세요
    fun greet(): Unit{
        println("Hello Kotlin")
    }
    // val/var 변수명: (매개변수의 자료형)->리턴타입 = 람다식
    val hello: () -> Unit = { println("Hello Kotlin") }

    // 다음은 정사각형의 넓이를 구하는 함수 입니다 람다식으로 바꿔 주세요
    // (square2 변수 선언)
    fun square1(x:Int):Int{
        return x*x
    }
    val square2 : (Int)->Int = {x -> x*x}

}

<ex고차함수>

package ex20221123

fun main() {

    var result: Int
    result = sum3({x,y->x+y}, 10, 20)
    println(result)

}
fun sum3(sum:(Int,Int)->Int, a:Int, b:Int): Int{
    return sum(a,b)
}

Android 스튜디오

 

Moblie Application 필요성

 

* 모바일 운영체제

- 모바일에서 실행되는 운영체제

-모바일 하드웨어 자원을 직접 제어하고 관리하는 시스템 소프트웨어

- 데스크톱 운영체제에 비해 부피가 작고 상대적으로 쉽게 개발 가능함

 

* 피처폰의 특징

- 별도의 운영체제가 없고 통화가능, 문자 기능 제공

- 제조사에서 미리 설치해 놓은 프로그램만 사용가능

- 잔고장이 없으나 소프트웨어 추가설치가 거의 불가


node.js

http통신하기ㄴ

 

템플릿엔진

 

템플릿 엔진의 종류

퍼그/ EJS/ 넌적스

 

<Ex06router>

<routes>

index.js

const express = require('express');
const router = express.Router(); //라우터 사용

router.get('/', (req,res)=>{
    res.send('index router!');
});

module.exports = router;

user.js

const express = require('express');
const router = express.Router();

router.get('/hello',(req, res)=>{
    res.send('USER ROUTER!!');
});

module.exports=router;

app.js

//app.js : node module 로딩, 초기화, router 유입점
const express = require('express');
const indexRouter = require('./routes'); //index.js는 생략가능(기본)
const userRouter = require('./routes/user');
const app = express();

app.set('port', process.env.PORT||8888);

app.use('/', indexRouter);
app.use('/user',userRouter);

app.listen(app.get('port'), ()=>{
    console.log(app.get('port'), '번 포트에서 서버 연결 대기중...');
});

<Ex07template>

<routes/index.js>

const express = require('express');
const router = express.Router();

//특정 요청 시
//index.html 응답+ 특정 데이터(html 에서 출력되도록)
router.get('/',(req, res)=>{
    // render 호출 시
    // 보내는 값 {}: 넌적스가 처리함
    // index : index.html 을 렡더링 하여 보내겠다!
    res.render('index', {title : 'value'});
})

module.exports =router;

<views/index.js>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body> <!--title : value-->
    <h1>{{title}}</h1>

    <!-- 내부 변수 선언 -->
    {%set node = 'node.js'%}
    {%set js ='node'%}
    <h3>{{node}}</h3>
    <h3>{{js}}</h3>

    <!-- 조건문 -->
    {% if js === 'node'%}
        <p>node입니다</p>
    {% elif js === 'java'%}
    <p>java입니다</p>
    {%else%}
        <p>js 입니다</p>
    {% endif %}

    <!-- 반복문 -->
    {%set fruits = ['사과', '배', '오렌지']%}
    <table border="1">
        <tr>
            {%for item in fruits%}
                <td>{{loop.index}}. {{item}}</td>
            {%endfor%}
        </tr>
    </table>
</body>
</html>

<app.js>

const express = require('express');
const nunjucks = require('nunjucks'); //넌적스 템플릿 엔진 사용
const indexRouter = require('./routes');
const app = express();

app.set('port', process.env.PORT||8888);
app.set('view engine', 'html'); //넌적스 = njk / html

app.use('/', indexRouter);

nunjucks.configure('views', {
    express: app, //app 객체 연결
    watch : true, //html 파일이 연결되면 템플릿 엔진을 다시 렌더링 
})

app.listen(app.get('port'), ()=>{
    console.log(app.get('port'), '번 포트에서 서버 연결 대기중...');
});

<Ex08login>

<routes/login.js>

const express = require("express");
const bodyParser = require('body-parser');
const router = express.Router();
router.use(bodyParser.urlencoded({ extended: true }));
// 특정 요청 시
// index.html 응답 + 특정 데이터(html에서 출력되도록)
// loginForm.html 렌더링
router.get("/", (req, res) => {
  //render 호출 시
  //보내는 값 {} : 넌적스가 처리함
  //index : index.html을 렌더링하여 보내겠다!
  res.render("loginform");
});
router.post("/login", (req, res) => {
  if (req.body.pw == "1234") {
    res.render("loginSuccess", { id: req.body.id });
  } else {
    res.render("loginFail");
  }
});
module.exports = router;

<views/loginFail.html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>로그인 실패!</p>
</body>
</html>

<loginform.html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="/user/login" method="post">
        ID: <input type="text" name="id"><br>
        PW: <input type="password" name="pw"><br>
        <input type="submit" value="LOGIN">
    </form>
</body>
</html>

<loginSuccess.html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    {{id}}님 환영합니다!
</body>
</html>

<app.js>

const express = require("express");
const nunjucks = require("nunjucks"); //넌적스 템플릿 엔진 사용
const loginRouter = require("./routes/login");
const app = express();
// 실행시 http://localhost:8888/user/login 주소로 실행
app.set("port", process.env.PORT || 8888);
app.set("view engine", "html"); //넌적스 = njk / html
app.use("/user", loginRouter);
//npm install nunjucks
//npm install nunjucks chokidar
nunjucks.configure("views", {
  express: app, //app 객체 연결
  watch: true, //html 파일이 연결되면 템플릿 엔진을 다시 랜더링
});
app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 서버 연결 대기중..");
});

<Ex09cookieseession>

[routes/cookie.js]

const express = require('express');
const router = express.Router();

//쿠키 설정하기
router.get('/setcookie', (req,res)=>{
    let nickname = 'pingu';

    res.cookie('nickname', nickname, {
        maxAge : 100000000, //밀리초단위 (만료시간)
    });

    res.cookie('dinner', '치킨', {
        expires : new Date(Date.now() + 60*60*24*1000*2), 
    });

    res.send('쿠키생성');
})

//쿠키 확인하기
router.get('/getcookies', (req,res)=>{
    console.log(req.cookies.dinner);
    res.send(req.cookies);
});

//쿠키 삭제
router.get('/deletecookie',(req,res)=>{
    res.clearCookie('dinner');
    res.send('쿠키삭제');
});

module.exports =router;

[app.js]

const express = require('express');
const app = express();
const cookieRouter = require('./routes/cookie');
const cookieParser = require('cookie-parser');

app.set('port', process.env.PORT||8888);

app.use(cookieParser()); //쿠키값 확인 시 필요
app.use('/c', cookieRouter);

app.listen(app.get('port'), ()=>{
    console.log(app.get('port'), '번 포트에서 서버 연결 대기중...');
});

 

728x90
LIST