내일배움단으로 듣고 있는 앱개발 역시 5주 내에 들어야하기 때문에 가장 먼저 들었다. 생각보다 시간을 많이 잡아 먹더라.

앱개발 강의는 마지막에 expo 앱을 깔아서 qr 코드를 찍는데서 문제가 생겨 조금 번거로웠다. 튜터님의 강의와 달리 내거 vs code는 start expo를 했는데 창이 뜨는게 없어서 내 환경에 맞는 qr코드를 받아올 수 없어 검색을 해봤더니 나와 같은 문제를 겪으신 분이 즉문즉답에 질문을 하시고 답변을 받으신 걸 블로그 글에 올린게 있어 그걸 보고 해결했다.

강의 들을게 많아서 이 쪽에서 시간을 좀 많이 쓰니 불안했는데 다행히도 주말에 java 강의를 미리 들어놓은게 있어 그 부분은 1.5 배속을 하고 다시 듣기를 했다. 그나마 다행이었다.

1. 앱개발 종합반

리액트 네이티브 & Expo

  • 리액트 네이티브는 페이스북에서 개발한 언어
  • 자바스크립트 언어 하나로 안드로이드와 ios 둘 모두에 배포가 가능하다는 장점을 가지고 있음

    처음 나왔을 때 개발자들을 당황시킨 언어로 기본 레거시, 전통적인 기법이 아님 요즘 시대에 맞게 나온 언어라 처음 배운 사람은 러닝 커브가 있을 수 있음

    리액트 네이티브만 사용하는 경우 진동이나 블루트스 같은 네이티브한 기능의 경우 안드로이드나 ios 코드단을 건드려야 하는 경우 발생
  • Expo는 리액트 네이티브를 다루기 쉽게 도와주는 도구
  • 라이브러리 설치시 Expo에서도 사용이 가능한지 확인 필요
  • Expo앱을 나의 핸드폰에도 깔아주면 에뮬레이터나 시뮬레이터가 없더라도 앱으로 통해 내가 개발한 앱을 확인 가능

    리액트 네이티브와 Expo를 사용하기 이전에 Node와 npm을 설치
  • npm을 이요한 명령어로 도구 설치

    yarn
  • 쉽게 도구를 꺼낼 수 있게 도와주는 도구


    cmd창에서
npm install - g yarn

을 입력하면 설치가 되며 yarn을 내 컴퓨터 어디서든 사용할 수 있도록 npm으로 설치하겠다. 라는 뜻이다.

버젼을 확인하고 싶은 경우 도구마다 다르지만 일반적으로 -v를 사용

cmd창을 깨끗이 하고 싶은 경우 cls 입력

- Expo 설치

npm install -g expo-cli

윈도우는 여기서 에러를 자주 겪는데

vs code 실행 - Terminal - configure terminal setting = @feature : terminal default 검색- default profile: window 찾아서 command prompt로 변경 후 Terminal을 끄고 new Terminal 해주면 된다.

  • expo 버젼 정보 확인
expo --version
  • 사용가능한 명령어 확인하고 싶을 때
expo

이렇게 설치해주면 앱 개발자들이 자주 어려움을 겪는 배포 단계가 그나마 쉬워진다.

한번에 배포를 위해서는 expo 사이트에서 expo 계정과 마켓 계정을 연동 시켜 주어야 한다.

cmd 창에서

expo login

을 해주면 사이트에서 만든 계정으로 로그인 가능

- expo 실행

폴더 하나를 만들어 그 안에서 개발한다.

vs code 실행 후 Terminal 오픈 후

expo init honeytip_Lee

를 입력하면 선택창이 뜨는데 blank 선택시 빈페이지로 expo 프로젝트가 자동으로 세팅되며 생성

expo 명령어는 생성된 프로젝트 내에서 실행해야 하기 때문에 항상 내가 어느 위치에 있는지 확인해야한다.

expo start를 해주면 QR코드가 뜨면서 expo 명령어를 사용한 개발이 가능해진다.

휴대폰에 깐 expo 앱과 연동할 때 환경에 따라 맞는 qr코드를 받아와야 하는데 선택하는 창이 보이지 않을 시 expo start --tennel 등을 해주면 내 환경에 맞는 설정으로 된 qr코드를 받아올 수 있다.

- 폴더 내용

asset
-앱이 가질 수 있는 이미지들을 넣어두는 장소

node_modules
-도구함

app.js
-대문같은 느낌으로 가장 먼저 실행된다

app.json
-expo의 사용설명서 느낌으로 배포를 할 때 마켓에서 이곳의 설정을 참고한다.

expo 앱을 사용하는 쪽에서 문제가 생겨서 한참을 헤맸다. 다행히 검색하니 방법이 나와서 그대로 따라 했지만 나는 대체 왜 저렇게 안 되지 이걸 어케 연결해야하나 하면서 멘탈이 살짝 흔들렸다. 안 그래도 이 수업은 국비지원 정규 수업이 아니라 정규 수업은 듣지도 않을 상태였기 때문이다.

2. JAVA 실무 기초

사실상 내일배움캠프에서 가장 처음 들은 수업이다. 당장 필요한 문법 위주로 실습형 수업을 하실거라고 하셔 제법 기대가 되는 중! 은 오늘 들은 내용에서 살짝 헷갈리고 이해가 되지 않는 점이 제법 많아 시간이 흘러 경험이 쌓이면 해결되기를 바라는 중이다.

상속과 인터페이스를 효율적으로 사용하는 법을 아직도 잘 모르겠다.

java

1995년 탄생 이후 꾸준히 축적된 노하우로 안정성이 매우 좋다는 장점이 있지만 오래된 언어인만큼 더 유연하고 견고한 코드를 만들기는 어렵다는 단점 역시 존재한다.

  • 사용하는 곳
  1. 백엔드 서버 개발
  2. 데이터 엔지니어링
  3. 하드웨어 실행환경에 구애받고 싶지 않은 경우

  • 배우면 좋은 점
  1. 정보가 많아 배우기 쉬운편
  2. JVM에서 동작하는 언어가 많은 편
  3. 이미 개발된 앱들이 있어 쉽게 대체되지 않음
  4. 수요가 많은 편

  • convention
    언어마다 개발자들간에 암묵적으로 통용되는 규칙을 의미하며 Java의 경우는 camel case를 사용한다.

변수 와 상수

  • 변수
    -어떤 데이터를 가리키는 이름
  • 상수
    -final 키워드를 붙여 변수를 선언
//선언형식
접근제어자 자료형 변수명

자료형

  • Primitive Type(기본 자료형)
  1. 숫자 shor, int, long, float, double
    -float와 double은 실수형 자료형으로 float의 경우 숫자값 뒤에 f를 사용해준다.
  2. 문자 char
  3. 논리 boolean
    -True와 False로 값이 반환되며 보통 경우의 수를 판단할 때 사용된다.
  4. 바이트 byte
    -데이터를 바이트 형태로 표현할 때 사용하며 초보 때는 거의 사용하지 않는다.
  • Reference Type(참조 자료형)
    기본 자료형을 제외한 모든 자료형으로 Java 언어의 특징이기도 하다.
    String이 클래스를 이용한 자료형으로 이 안에 속하며 IDE에서 Ctrl 클릭을 하면 정의로 넘어갈 수 있다.

배열

동일한 자료형을 연속된 공간에 저장하기 위한 자료구조
-코드를 간결하게 사용 가능하다는 장점이 존재

인덱스는 데이터의 위치를 나타내며 컴퓨터의 인덱스는 0부터 시작한다.

배열은 선언과 동시에 초기화를 하지 않으면 자료형의 default 값이 들어가며 reference type은 기본값이 없어 아무 값도 들어가지 않는다 - 값이 없다는 뜻의 null로 출력됨

tip. 코드를 잘 짜기 위해선 경험이 많나야하는데 경험을 쌓아나가는 입장에서는 코드 입력 중 뜨는 노란 줄이나 
빨간 줄의 내용을 잘 확인하자 - 프로그램이 가이드라인을 제시해준다. 
  • 배열의 길이를 알고 싶을 때
    배열명.length
    ex) 배열의 마지막 값을 알고 싶을 때 - 배열명.length - 1

    실제 배열은 잘 쓰이지 않는다.

문제 1) 문자 변수 S 그리고 정수형 변수 10을 선언하고 출력해보시오

char c = 's';
in t num = 10;
System.out.println(s);
System.out.println(num);

문제2) 크기가 3인 정수형 배열을 선언하고 배열의 마지막 값을 배열 변수를 이용해 출력하시오

//10, 20, 30  할당
int[] intArray = new int{10, 20, 30};
System.out.println(intArray[intArray.length-1]);

연산자

거의 모든 언어가 비슷하기 때문에 한 번 배워놓으면 편하다
1. 산술연산자

+(더하기), -(빼기), *(곱하기), /(나누기), %(나머지값구하기)
  1. 대입연산자
    계산한 결과를 대입하겠다는 뜻
+=(더한 후 대입), -=(뺀 후 대입), *=(곱한 후 대입), /=(나눈 후 대입), %=(나머지를 구해서 대입)
  1. 관계연산자
    비교하는 연산자
<, >, <=, >=, ==, !=(다른가?)
  1. 논리연산자
&& : And조건 둘 다 참일 때만 참
|| : OR조건 둘 중 하나라도 참이면 참
!(NOT) : 반대조건 참이면 거짓, 거짓이면 참
  1. 비트연산자
    데이터의 가장 작은 단위를 연산, 시스템 프로그래밍이 아니면 실무에서도 쓸 일이 거의 없음

    문제1) 주어진 코드를 보고 출력 결과를 생각하시오
int num1 = 10;
int num2 = 3;
boolean bool1 = true;
boolean bool2 = false;
num += num1;
num2 *= num1;
System.out.printdln(num1);			//20
System.out.println(num2);			//60
System.out.println(bool1&&bool2);	//false

조건문

조건에 따라 실행되는 코드가 달라짐

  • if문, else if
    위에서 순차로 실행되며 조건에 맞는 코드를 실행하면 아래는 실행하지 않는다.
  • Switch 문
    조건들을 계층적으로 선언하며 각 조건마다 탙출을 의미하는 break를 써주지 않으면 맞는 조건을 찾은 후 break문을 만날 때까지 아래코드를 확인도 안 하고 실행해버리며 default는 모든 case에 해당하지 않는 경우 실행된다.
  • 삼항연산자
    String result = 조건?"참일 때 실행"!"거짓일 때 실행"
    이런 식으로 쓰인다


    문제1)등급을 출력하는 조건문 작성
100~91 = a
90~81 = b
80~71 = c
나머지 전부 f
if(score > 90 && sroce <= 100){
	System.out.println("A등급 입니다.");
}else if(score > 80 && sroce <= 90){
	System.out.println("B등급 입니다.");
}else if(score > 70 && sroce <= 80){
	System.out.println("C등급 입니다.");
}else{
	System.out.println("F등급 입니다.");
}

반복문

반복처리를 해야하는 경우 로직을 만들어서 수행

  • for문
for(초기화구문; 조건문; 반복문 종료 후 실행;){}
  • for - each문
    배열이나 collection 등 어떤 나열들이 있는 변수가 있을 때 반복문을 쉽게 할 수 있는 형태
for(String day: days){
	System.out.println(day);
}

-days에 있는 값을 하나씩 꺼내서 day 변수에 넣어서 끝까지 실행하겠다는 뜻

  • while문
while(조건){
	내용;
    i++;	//있어야 무한루프에 빠지지 않는다.
}

-i++이 없으면 조건이 바뀌지 않기 때문에 주의해야한다.

  • do-while문
    일단 실행하고 조건을 확인한다.
do{
	내용;
    i++;
}while(조건);
  • 반복문 중간에 빠져나오고 싶은 경우
    if문에 break 사용
    -조건에 맞으면 빠져나온다.
  • 반복문 중간에 특정 값만 빼고 싶은 경우
    if문에 continue 사용
    -조건에 맞으면 그 즉시 빠져나와 다음 반복을 실행한다.
if(조건){
	i++;		//해주지 않으면 무한루프에 빠진다. 조건이 바뀌지 않기 때문
    continue;
}

문제1) 1부터 100까지 합을 구하는 반복문 코드 작성

int num = 0;
for(int i = 0; i < 100; i++){
	sum += i;
}

문제2) 1부터 30까지 홀수의 합과 짝수의 합을 구하고 각각 출력하시오

int num1 = 0;
int num2 = 0;
for(int i = 0; i < 30; i++){
	if((i+1)%2 == 0){
    	num1 += (i+1);
    }
    else
    	num2 += (i+1);
}
System.out.println(num1);
System.out.println(num2);

객체 지향 언어

class

어떤 모양인지 정해진 틀과 같은 개념

인스턴스

틀에서 찍어내 나온 것, 클래스로부터 만들어진 객체

메소드(method)

어떤 작업을 수행하는 코드를 하나로 묶어놓은 것으로 반복 수행되는 코드를 하나로 묶어 프로그램의 재사용성과 구조화를 위해 사용한다.

  • 메소드를 선언할 때 지켜주면 좋은 code convention
  1. 동사로 시작
  2. camel case로 작성
리턴타입 함수명(파라미터-필요한 값){
	return 리턴타입;
}

생성자

인스턴스가 생성될 때 불리는 초기화 method
-생성자는 클래스의 이름과 똑같이 지어야 하며 return 값이 존재하지 않는다.
-생성자를 만들지 않은 상태에서 선언하면 기본적으로 아무 값도 안 들어간 상태로 선언이 된다.

class phone{
	String model;
    String color;
    int price;
    phone(String model, String color, int price){
    	this.model = model;		//자주 사용되는 패턴으로 model에 받아온 model 값을 넣어준다
        this.color = color;
        this.price = price;
    }
}

와 같이 class를 만들 때 필드는 선언만 해주며 객체를 만들 때 아래 생성자가 실행된다.

상속

자식 클래스는 부모 클래스의 필드와 메소드를 계승받고 자신만의 필드와 메소드를 추가 가능하다.

  • UML
    상속을 보여주는 형식
  • method overiding
    자식 클래스가 물려받은 메소드를 수정 가능
  • 선언방식
class 클래스이름 extends 상속받을 부모클래스{}

선언부에 부모타입을 쓸 수 있음

부모클래스 클래스명 = new 자식클래서["값"];

이 경우 자식 클래스로 객체를 만들었어도 자료형이 부모 클래스면 부모의 기능만 수행

상속은 하나의 클래스만 가능하다.

overloading

한 클래스 내에서 동일한 이름의 method를 여러개 갖는 것으로 아래 조건을 맞춰야한다.
1. 이름이 같아야한다.
2. 매개 변수의 개수나 type이 달라야한다.

overriding

부모 클래스로부터 상속받은 method를 자식 class에 정의하여 부모 class의 메소드를 없는셈 치는 것

접근제어자(access modifier)

멤버변수/ 함수, 클래스 앞에 붙어 사용되며 외부 접근을 제어하는 역할
+캡슐화를 돕는 하나의 도구

private : 같은 클래스 내에서만 접근 가능
default : 같은 패키지 내에서만 접근 가능
pritected : 같은 패키지 내에서 그리고 다른 패키지의 자손 클래스에서 접근 가능
public : 접근 제한 없음

import

  • 다른 패키지의 클래스를 참조할 때 선언해줘야함
    -자바는 패키지 이름까지 클래스로 인식
객체지향은 객체 간의 상호작용을 표현하는 것

추상클래스

추상메소드를 선언할 수 있는 클래스, 다중상속 불가
-상속받는 자식 클래스가 없다면 그 자체로 인스턴스 생성 불가 - 일반클래스와의 차이

  • 추상메소드
    설계만 되어있고 구현체는 존재하지 않음 - 자식 클래스에서 구현
    abstrat를 앞에 붙이면 추상 method가 됨

인터페이스(interface)

객체의 특정 행동의 특징을 정의

접근제어자 리턴타입 메소드명{
	할수():
}

필드가 존재하지 않으며 상세 내용은 인터페이스를 상속받는 클래스에서 반드시 구현해야함

class 클래스명 implements 인터페이스명{
	필드 정의;
    @override
    public void 인터페이스 내의 함수(){
    	구현할 내용;
    }
}

여러개의 인터페이스를 상속 가능하지만 메소드를 전부 구현해주어야 한다.

객체지향 문제는 하면서 멘탈도 많이 깨졌고 길기도 길어서 내일 따로 글 하나 파서 거기다 올려놓겠다. 시간 엄청 깨졌음...

이 후에 알고리즘 강의를 들었는데 ㅎ... 강의 들은 시간은 짧았는데 여기도 역시 문제 하나 잡고 있다가 시간을 오래 잡아 먹었다. 너무 늦은 시간이라 내일 TIL과 함께 올리거나 추가할 예정

자바에서는 상속에서 골머리를 썩는 중이다.

생성자도 클래스를 만들 때 주의해야할 부분, 정작 하라고 하니 이 부분을 잘 못하더라.

접근제어자는 어떤 상황에 쓰이는 편인지 찾아볼 필요 있으며 추상클래스와 인터페이스는 자료를 더 찾아보거나 하다보면 이해하겠지 하는 심정으로 넘겨야할 듯. 객체지향문제 해설을 보면서 인터페이스를 써보긴 했는데 맞게 썼는지도 잘 모르겠다.

profile
개발자의 길에 한 걸음 더

0개의 댓글