[목차]

#.5-1 5주차 오늘 배울 것 04:26
#.5-2 [수익형 앱]앱에서 수익을 내는 방법 04:43
#.5-3 [구글광고] 애드몹(AdMob) - 설정 36:06
#.5-4 [배포하기] 배포를 위한 체크리스트 00:00
#.5-5 [배포하기] 스플래시 스크린 11:52
#.5-6 [배포하기] 안드로이드 & iOS(자료참고) 배포 26:53
#.5-7 [마무리] 끝 & 작품 제출하기 00:00

01. 5주차 오늘 배울 것

  • 구글 광고, 애드몹(AdMob)
    - 구글 광고
    - 앱 여기저기 광고를 붙여 사용자들이 수익 발생 할 수 있게
  • 배포를 위한 체크리스트
    - Expo를 이용한 앱 배포

02. [수익형 앱]앱에서 수익을 내는 방법

  • 수익을 낼 수 있는 방
    - 앱 마켓에 유료앱 배포 수익 모델
    - 앱 내 배너 광고 수익 모델
    - 앱 콘텐츠 판매 수익 모델: 인 앱 결제
    - 구독 수익 모델
    - 앱 개발 용역 수익 모델

03. [구글광고] 애드몹(AdMob) - 설정

  • 애드몹  광고 유형

광고 유형

  • 애드몹 가입 및 프로젝트 생성
  • 앱에 애드몹 사용 준비하기
  • 앱 하단 가로 배너 광고 생성 및 적용
  • 결과확인
  • 앱을 플레이 스토어에 올렸는데 애드몹
  • 나만의 꿀팁 앱 팁 선택시 디테일 페이지 가기전에 광고 달기!

04. [배포하기] 배포를 위한 체크리스트

  • Expo의 배포 과정
  • 앱 마켓 둘러보기
  • 배포를 위한 시작

05. [배포하기] 스플래시 스크린

  • 로고&스플래시 스크린 준비
  • 온라인 포토샵
    - https://pixlr.com/kr/x/
  • [실습 ✍️] 스플래시 스크린
    - Expo 앱 생성시 기본 이미지
    - assets 폴더 aplash.png
    - VSCode 확인 app.json
      {
      "expo": {
        "name": "sparta-myhoneytip-gun",
        "slug": "sparta-myhoneytip-gun",
        "version": "1.0.0",
        "orientation": "portrait",
        "icon": "./assets/icon.png",
        "splash": {
          "image": "./assets/splash.png",
          "resizeMode": "contain",
          "backgroundColor": "#ffffff"
        },
  • [실습 ✍️] 로고
    - Expo 클라이언트 앱 종료 후 expo start 후 적용

06. [배포하기] 안드로이드 & iOS(자료참고) 배포

  • 배포 진행 순서
    - Expo EAS를 통한 최종 앱 파일 생성
    - 구글 플레이 개발자 라이센스 가입 및 구입
    - 구글 플레이 스토어에 앱 배
  • Expo를 통한 최종 앱 파일 생성
    - app.json 작성
    - 최종 파일 생성 (JDK설치 필수)
      > npx expo prebuild
      > eas build -p android --profile production

  • 구글 플레이 개발자 라이센스 가입 및 구입
    - 구글 플에이 스토어
       > https://developer.android.com/distribute/console?hl=ko

  • [실습 ✍️] 구글 플레이 스토어에 최종 앱 배포
    - App Bundle 파일 준비
    - New 구글 플레이 콘솔 앱 배포 방식

 

[목차]

#.4-1 4주차 오늘 배울 것 04:54
#.4-2 [앱과 서버] 날씨 서버 외부 API 28:44
#.4-3 [파이어베이스] 파이어베이스(firebase) 소개 08:48
#.4-4 [파이어베이스] 앱 연동 및 파일 스토리지 사용 11:28
#.4-5 [파이어베이스] 리얼타임 데이터베이스 - 설정 09:23
#.4-6 [파이어베이스] 리얼타임 데이터베이스 - 전체 데이터 읽기 11:48
#.4-7 [파이어베이스] 리얼타임 데이터베이스 - 특정 데이터 읽기 07:58
#.4-8 [파이어베이스] 리얼타임 데이터베이스 - 쓰기 08:54

 

01. 4주차 오늘 배울 것

  • 앱 & 서버 구성

앱 & 서버

  • 서버리스(serverless)
    - 데이터 생성, 조회, 삭제/수정 등을 제공해주는 서비스

  • 파이어베이스(firebase)

 

02.  [앱과 서버] 날씨 서버 외부 API

  • 날씨 API 사용하기 (1)
    > expo install expo-location
    - MainPage.js 소스 작성하기
      . 외부 API 요청 작업은 try /catch로 감싸기 
      . 함수 실행 순서를 정해주는 async / await

      . 위도 경도 가져오기

날씨 API 사용하기 (2)
- API 사용
- 서버가 제공하는 도메인 형식의 API를 사용하려면, 사용을 위한 도구가 필요합니다. 이를 axios
> yarn add axios
- MainPage.js 소스 작성하기
  . import axios from "axios"
  . API_KEY 제공
  . const result = await axios.get( `http://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${API_KEY}&units=metric` );
- 참조 URL
  . https://www.npmjs.com/package/axios
  . https://openweathermap.org/current 

  • 서버에서 주는 데이터 형식 JSON
    - JSON 구조 : 리스트(list) + 딕셔너리(dictionary)

JSON 구조

03. [파이어베이스] 파이어베이스(firebase) 소개

  • 서버리스(serverless)란?
    - 서버를 구현, 구성 할 필요없이 상용화된 서버를 이용하는 서비
  • 구글 파이어베이스(firebase)
  • 파이어베이스 가입
  • 파이어베이스 프로젝트 생성
    - prj-test01

04. [파이어베이스] 앱 연동 및 파일 스토리지 사용

  • firebase 라이브러리 설치 및 연결
  • 파이어베이스 프로젝트 내에서 앱 생성하기
  • 앱에 파이어베이스 도구 설치 및 연결
    > expo install firebase
    - 파일 생성 : firebaseConfig.js
  • 파일 저장소 스토리지(storage)
    - 이미지 파일 업로드

05. [파이어베이스] 리얼타임 데이터베이스 - 설정

  • 리얼타임 데이터베이스 소개
    - JSON 형태로 저장/관리 되는 데이터베이스 서비스
  • firebaseConfig.js
    - databaseURL 는 개인 식별정보 사용
  • 리얼타임 데이터베이스 생성

06. [파이어베이스] 리얼타임 데이터베이스 - 전체 데이터 읽기

JSON 구조체

07. [파이어베이스] 리얼타임 데이터베이스 - 특정 데이터 읽기

  • 특정 데이터 조회하기

08. [파이어베이스] 리얼타임 데이터베이스 - 쓰기

  • 필요한 데이터 구조
    - 꿀팁 번호: idx
    - 꿀팁 이미지: image
    - 꿀팁 제목: title
    - 꿀팁 내용: desc
  • 선언하기
    > expo install expo-application
    - import * as Application from 'expo-application';

 

[목차]

#.3-1 3주차 오늘 배울 것 04:54
#.3-2 [복습, 함께해보기] 나만의 꿀팁 앱 상세 화면 09:04
#.3-3 [앱 필수 기초지식] 컴포넌트, 속성(Props), 상태(useState), useEffect 47:26
#.3-4 [Expo 앱다운 앱기능01] 앱 상태 바(Status Bar) 관리 06:25
#.3-5 [앱 페이지 적용] 스택네비게이션 47:18
#.3-6 [Expo 앱다운 앱기능02] 페이지 내용 공유하기, 외부 링크 클릭 이벤트 08:54
#.3-7 3주차 끝 & 숙제 설명 06:02

 

01. 3주차 오늘 배울 것

  • [앱 필수 기초지식] 리액트 필수지식
    - 컴포넌트(Component)
    - 상태(State,useState)
    - 속성(Props)
    - useEffect

02. [복습] 나만의 꿀팁 앱 상세 화면 만들어보기

  • 프로그램 목록
    - App.js
    - MainPage.js
    - AboutPage.js

03. [앱 필수 기초지식] 컴포넌트, 속성(Props), 상태(useState), useEffect**

  • 리액트 기본 구조






  • 컴포넌트(Component)
    - 정해진 엘리먼트들(요소)을 사용하여 만든 화면의 일부분
  • 상태(State)
    - 컴포넌트에서 데이터를 유지하고 관리하기 위한 유일한 방법 == 그냥 사용할 데이터!
  • 속성(Props)
    - 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달하는 방식 == 그냥 데이터 전달!
  • useEffect
    - 화면에 컴포넌트가 그려지면 처음 실행해야 하는 함수들을 모아두는 곳

기본구조

04. [Expo 앱다운 앱기능] 앱 상태 바(Status Bar) 관리

  • StatusBar 상태 바 설치
    > expo install expo-status-bar
    > import { StatusBar } from 'expo-status-bar';

05. [앱 페이지 적용] 스택네비게이션

  • 네비게이션 설치
    > yarn add @react-navigation/native
    > expo install react-native-screens react-native-safe-area-context react-native-gesture-handler
  • createStackNavigator 사용해
    > yarn add @react-navigation/stack
  • 컴포넌트를 페이지화 시키는 스택 네비게이션 구조

컴포넌트 구조 (책갈피, Stack.Navigator 동일)

  •  

06. [Expo 앱다운 앱기능02] 페이지 내용 공유하기, 외부 링크 클릭 이벤트

  • 네비게이션 설치
    import { Share } from "react-native";

  • 설치
    > expo install expo-linking
    소스 : import * as Linking from 'expo-linking';

//원본
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start ~~ ! v.pc4.3</Text>
      <StatusBar style="auto" />
    </View>
  );
}

 
 
  // 시뮬레이터 설치하기
  1) 시뮬레이터?
  
  2) 안드로이드 에뮬레이터 설치
 
  3) Xcode 시뮬레이터 설치
    ~~~???
  
  7) Expo 프로젝트 기본 폴더 구조
    1) assets
    2) node_modules
    3) App.js
    4) app.json
    
  8) 본격적으로 앱 개발 들어가기
    1) Expo 명령어 설치
    2) 로컬에 Expo 계정 세팅
    3) expo init 명령어로 기본 앱 생성
    4) expo start로 Expo 앱 실행
    5) 휴대폰에 설치한 Expo 클라이언트 앱으로 Expo 앱 실행
 
 
 
 
 

03. [앱 화면 만들기] JSX 문법  

9-1) App.js 구석구석 살펴보기
//우리가 리액트, 리액트 네이티브, 엑스포 라이브러리에서 꺼내 사용할 기능들을
//이렇게 앞으로도 상단에 선언한다음 가져다 사용합니다.
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

//App.js는 결국 App 함수를 내보내기 하고 있는 자바스크립트 파일입니다.
//이 함수는 무언가?를 반환하고 있는데 결국 화면을 반환하고 있습니다.
export default function App() {
//화면을 반환합니다.
//HTML 태그 같이 생긴 이 문법은 JSX라 불리우며 실제 화면을 그리는 문법입니다,
//이번 강의에서 자세히 다룹니다

  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}

// styles 변수 이름 답게 화면을 그려주는, 
//더 자세히는 JSX문법을 꾸며주는 내용을 담고 있습니다.
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});
 
 
9-2) 노란색 경고창 안보이게 하기
//우리가 리액트, 리액트 네이티브, 엑스포 라이브러리에서 꺼내 사용할 기능들을
//이렇게 앞으로도 상단에 선언한다음 가져다 사용합니다.
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View, LogBox } from 'react-native';

//App.js는 결국 App 함수를 내보내기 하고 있는 자바스크립트 파일입니다.
//이 함수는 무언가?를 반환하고 있는데 결국 화면을 반고 있습니다.
export default function App() {
//화면을 반환합니다.
//HTML 태그 같이 생긴 이 문법은 JSX라 불리우며 실제 화면을 그리는 문법입니다,
//이번 강의에서 자세히 다룹니다

LogBox.ignoreLogs(['Warning: ...']);


  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}

// styles 변수 이름 답게 화면을 그려주는, 
//더 자세히는 JSX문법을 꾸며주는 내용을 담고 있습니다.
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});


10) 화면을 구성하는 태그 문법, JSX - error
1) JSX 기본 문법
1) 모든 태그는 가져와서 사용함
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}

2) 태그는 항상 닫는 태그와 자체적으로 닫는 태그를 구분해서 사용해야 함!
export default function App() {
  return (
//<View>는 결국 두번째 줄 밑에 </View>로 닫히면서 본인 영역을 갖습니다 
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
//statusBar는 본인 스스로 닫는 태그이므로 다음과 같이 사용이 가능합니다.
      <StatusBar style="auto" />
    </View>
  );
}


3-1) 모든 엘리먼트는 감싸는 최상위 엘리먼트가 있어야 함. 엘리먼트는 곧! 태그 <> 입니다
//App.js가 렌더링 하고 엘리먼트는 결국
//Text와 StatusBar엘리먼트를 감싸고 잇는 View입니다.
export default function App() {
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}


3-2) 다음과 같이 감싸는 엘리먼트가 없다면 오류가 발생합니다.
//View 엘리먼트 밖에 StatusBar가 나와 있으므로 엘리먼트 전체를 감싸는 엘리먼트가 
//없어서 오류가 납니다.
export default function App() {
  return (
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
    </View>
<StatusBar style="auto" />
  );
}


3-3) 꼭 감싸는 엘리먼트 없이 , 혹은 추후 디자인적인 측면을 위해 없이 진행해야 한다면,
다음과 같이 프래그먼트라는 의미없는 엘리먼트로 감싸서 렌더링 할 수도 있습니다.
하지만 이 방법은 지양해야하는 방식입니다. 
export default function App() {
  return (
 <>
    <View style={styles.container}>
      <Text>Open up App.js to start working on your app!</Text>
    </View>
<StatusBar style="auto" />
 </>
  );
}


4) return에 의해 렌더링 될 땐 항상 소괄호로 감싸져야 한다.

5) JSX 문법 밖에서의 주석과 안에서의 주석은 다르다!
//JSX밖에서의 주석
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
//JSX밖에서의 주석
export default function App() {
//JSX밖에서의 주석
  return (
//JSX 밖에서의 주석
    <View style={styles.container}>
{/*
JSX 문법 안에서의 주석
*/}
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );
}

//JSX밖에서의 주석
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});


 
04. [앱 화면 만들기] 화면을 구성하는 엘리먼트들
11) <View>
 
12) <Text>
 
13-1) <ScrollView>
 
13-2) <ScrollView>
 
14-1) <Button>과 함수
 
14-2) 
//각 엘리먼트들 마다 고유한 속성 값을 갖는데, 이 속성 값을 잘 이용하여 다양한 기능을 구현 할 수 있습니다. 
//Button 태그를 예로 들면, 버튼 안에 잇는 문자는 title이란 속성에 값을 넣어서 구현 할 수 있고,
//버튼 색상은 color 속성에 값을 넣어서 적용 할 수 있습니다. 
//눌렀을 때 어떤 이벤트가 일어나게 하려면 onPress에 함수를 연결(바인딩)하면 되는데, 
//이 부분을 좀 더 살펴보겠습니다.
//다음 두 가지 버튼 구현 방식은 결국 동일한 결과를 보여줍니다.
14-3) 
// onPress에 연결한 함수 구현부를 JSX 밖에서 구현한 다음 연결 할 수도 있습니다.
// 그땐 화살표 함수로 구현하여 함수를 만든 다음 연결해야 합니다. 
 
 
14-3) 
// onPress에 연결한 함수 구현부를 JSX 밖에서 구현한 다음 연결 할 수도 있습니다.
// 그땐 화살표 함수로 구현하여 함수를 만든 다음 연결해야 합니다.
 
 
15) <TouchableOpacity/>
 
 
16-1) Image(assets)
 
16-2) Image(외부)
 
17) 모든 태그에 공통적으로 있는 styles 속성
//지금껏 자세히 다루진 않았지만, 엘리먼트들 즉 태그들에 스타일을 주기 위해서
// 파일 하단에 코드를 작성해 두었었습니다. 다음과 같이 말이죠!
 
 
18) 화면을 꾸며주는 StyleSheet 문법
 
 
19-1) Flex
 
 
19-2) Flex
 
 
19-3) Flex - flexDirection
 
 
19-4) Flex - justifyContent
 
 
19-5) Flex - alignItems
 
 
 
오류) expo init prj-edu03 생성시 오류 발생된 경우

PS C:\Users\user22\Desktop\앱개발\sparta study> expo init sparta-myhoneytip-han

expo : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\user22\AppData\Roaming\np

m\expo.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://

go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.

위치 줄:1 문자:1

+ expo init sparta-myhoneytip-han

+ ~~~~

  + CategoryInfo     : 보안 오류: (:) [], PSSecurityException

  + FullyQualifiedErrorId : UnauthorizedAccess

 
 
 
 
해결)  
# 실행창에 Windows PowerShell을 "관리자" 모드로 열어주신 후 ExecutionPolicy 변경해주시면 해결됩니다!

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

# 를 입력하여 실행 규칙을 Restricted에서 Unrestricted로 변경해주세요!
# " ~~ 변경하시겠습니까?" 라고 물어보면 예(Y) 또는 모두 예(A)를 선택해주세요!

Get-ExecutionPolicy -List

 

 

#.1-4 업무자동화 - 스크래핑 실습 14:35
 - 실습1
   !pip install bs4 requests
   Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
   Requirement already satisfied: bs4 in /usr/local/lib/python3.8/dist-packages (0.0.1)
   Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (2.25.1)
   Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.8/dist-packages (from bs4) (4.6.3)
   Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests) (1.24.3)
   Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests) (4.0.0)
   Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests) (2.10)
   Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests) (2022.12.7)

 

- 실습2
   import requests
   from bs4 import BeautifulSoup
  

   headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

  data = requests.get('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers
   
   soup = BeautifulSoup(data.text, 'html.parser')
   a = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
   
   print("a       = ", a)
   print("a.text  = ", a.text)
   print("title   = ", a['title'])
   print("class   = ", a['class'])
   print("onclick = ", a['onclick'])
   print("href    = ", a['href'])
 
 - 실습3
   import requests
   from bs4 import BeautifulSoup


   headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

  data = requests.get('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers
   
   soup = BeautifulSoup(data.text, 'html.parser')
   #a = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
   #lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
   lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
   for li in lis:
     a = li.select_one('a.news_tit')
     print("001", a.text, a['href'])
   
   ##a.text

- 실습4
  import requests
  from bs4 import BeautifulSoup
  
  def get_news(keyword):

    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

    data = requests.get('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers
  
    soup = BeautifulSoup(data.text, 'html.parser')
    #a = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
    #lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
    lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
    for li in lis:
      a = li.select_one('a.news_tit')
      print("001", a.text, a['href'])
  
  print('삼성전자---------------------------------------------------')
  get_news('삼성전자')
  print('현대자동차-------------------------------------------------')
  get_news('현대자동차')
  print('LG전자-----------------------------------------------------')
  get_news('LG전자')
  ##a.text

 

>.0강의
#.0-1 수강환경 튜토리얼 04:33
#.0-2 즉문즉답 튜토리얼 04:22
#.0-3 개발일지 튜토리얼 01:35
#.숙제 주식 데이터를 활용한 파이선
  즉문즉답 질문하기
  제목 : 2주차 3강에 나오는 첫번째 퀴즈 질문드립니다.
  내용 : 제가 퀴즈하다가.. ..
  내용 : 추가 질문이 있습니다....
        ~~~는 어떻게 해애 하나요?
  
  개발일지 : 티스토리, 미디엄, 벨로그, 1주일 마다
  개발일지 : https://suwon8088.tistory.com/
  
  모든 토글 열고/닫기 : Ctrl + alt + t
  주석 : # 주석문 입니다.
  실행 : Ctrl + Enter 또는 Shift + Enter
  복사 : Alt + Shift + 아래방향키
  
>.1강의
 .colab

#.1-1 오늘 배울 것 04:01
 . 
#.1-2 Colab 구동하기 03:34
 .URL 접속하여 코딩하기
 .하루 최대 12시간, 세션 90분
#.1-3 파이썬 기초 21:11
 - 변수 & 기본연산
 - 리스트, 딕셔너리 형
 - 실습1
   a = 2
   b = 3
   a+b
 
 - 실습2
   a_list = ['사과', '배', '감' '수박']
   b = 'bbb3'
   a_list.append('바나나')
   a_list 
 
 - 실습3
   a_dict = [{'name':'bob', 'age':21},{'name':'tam', 'age':21}]
   a_dict[0]['name']
   a_dict[0]['hight'] = 178
   a_dict[0]['hight']
   a_dict

 - 3) 함수
   def fn_test(a,b,c):    # 작성예제
return a+b_c
 - 실습1
   def fn_test(a,b,c):
     print('11111111111111')
     return a+b+c
   
   def sum(a,b):
     print('--------------------')
     return a+b
   
   result = sum(12,32)
   print('결과값은 v.2 = ', result)
   print('--------------------')

 - 4) 조건문
   age = 15

   def is_adult(age):
     if age > 20:
       print('성인')
       print('---------------------')
     else:
       print('청소년')
       print('---------------------')

   is_adult(30)
   is_adult(25)
   is_adult(15)
 
 - 5) 반복문
   for age in ages:
     is_adult(age)

 

 
 
# 정리1) list(I) 다뤄보기
array_key = ["aaa""bbb""ccc"]
array_ty1 = ["100""200""300"]

print("# 정리1) list 다뤄보기")
print("list란? array_key = ", array_key, " / array_key = [1] = ", array_key[1])
print("list란? array_ty1 = ", array_ty1, " / array_ty1 = [1] = ", array_ty1[1])

num1 = array_ty1[1] * 3
num2 = int(array_ty1[1]) * 3
num3 = str(num2) + 'kg / '

print("숫자변한 num1 = ", num1, " / ""int(array_ty1[1]) = ", num2)
print("문자변환 num3 = ", num3 * 3"\n")

# 정리1) list(II) 다뤄보기
array_key2 = [("aaa""bbb""ccc"), ("xxx""yyy""zzz")]
array_ty12 = ["100""200""300"]

print("multi list? array_key2 = ", array_key2)
print("            array_key2[0][1] = ", array_key2[0][1])
print("            array_key2[0][1] = ", array_key2[1][1])


>> 결과
# 정리1) list 다뤄보기
list란? array_key = ['aaa', 'bbb', 'ccc'] / array_key = [1] = bbb
list란? array_ty1 = ['100', '200', '300'] / array_ty1 = [1] = 200
숫자변한 num1 = 200200200 / int(array_ty1[1]) = 600
문자변환 num3 = 600kg / 600kg / 600kg /
 
multi list? array_key2 = [('aaa', 'bbb', 'ccc'), ('xxx', 'yyy', 'zzz')]
                array_key2[0][1] = bbb
                array_key2[0][1] = yyy

 

# 정리2) Dictionary 다뤄보기기

a_dict = {'name':'abc1''age':21}

 

print("# 정리2) Dictionary 다뤄보기기")

print("a_dict = ", a_dict)

print("a_dict['name'] = ", a_dict['name'], "\n")

a_dict2 = [{'name':'abc1''age':21}, {'name':'xyz2''age':24}]
print("a_dict2 = ", a_dict2)
print("a_dict2[0]['name'] = ", a_dict2[0]['name'])
 
>> 결과
# 정리2) Dictionary 다뤄보기기
a_dict = {'name': 'abc1', 'age': 21}
a_dict['name'] = abc1
 
a_dict2 = [{'name': 'abc1', 'age': 21}, {'name': 'xyz2', 'age': 24}]
a_dict2[0]['name'] = abc1

 

#.0-1 수강환경 튜토리얼 04:33
#.0-2 즉문즉답 튜토리얼 04:22
#.0-3 개발일지 튜토리얼 01:35
#.숙제 주식 데이터를 활용한 파이선
  즉문즉답 질문하기
  제목 : 2주차 3강에 나오는 첫번째 퀴즈 질문드립니다.
  내용 : 제가 퀴즈하다가.. ..
  내용 : 추가 질문이 있습니다....
        ~~~는 어떻게 해애 하나요?
  
  개발일지 : 티스토리, 미디엄, 벨로그, 1주일 마다
  개발일지 : https://suwon8088.tistory.com/
>.1강의
#.1-1 오늘 배울 것 11:07
 -1주차 : java 설명
 -2주차 : js 문법
 -3주차 : react 네이티브, expo
 -4주차 : 파이어베이스 - backend
 -5주차 : 구글 광고 붙이기 + 배포 --> 수익성 앱 만들기
#.1-2 필수 프로그램 설치(Windows 기준) 02:09
 - 필수 프로그램 설치
   안드로이드 스튜디오
   nodem, npm 설치
#.1-3 Javascript 기초 문법 - 1 16:17
 - JAVA 구글 브라우저 실행
   F12 > Console 탭에서 > java 명령어 실행  (console.log("aaa bbb")
 - js 문법
   var 예전 선언문

 - 실습1
   let num = 20;
   num = 'Bob';

   let a = 1;
   let b = 2;

   a+b;  //3
   a/b;  //0.5

 - 실습2
   let a = 1
   let b = 2
   let first_name = 'Jeong'
   let last_name = 'Dong Ho'

   console.log(a*b);
   console.log(first_name+" "+last_name);
   console.log(first_name+" "+last_name + (a*b));
   console.log(first_name+" "+last_name +  a*b);
   // console.log(a*b+frist_nmae+last_name)

#.1-4 Javascript 기초 문법 - 2 29:43
 - 리스트 배열(Array) & 딕셔너리(객체)

 - 실습1
   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, '헤이']

 - 실습2
   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}
  
   console.log(b_dict['name'])

 - 실습3
   names = [{'name':'bob', 'age':20}, {'name':'carry', 'age':38}]
   new_name = {'name':'john', 'age':17}
   names.push(new_name)
   console.log("name = "+names[2]['name'])
   console.log("name = "+names[2].name)

 

 

 

 

완강을 목표로 열심히 하자^^!

 

+ Recent posts