본문 바로가기
Backend boot camp/Session1

Session1 회고

by orioncsy 2022. 9. 19.

  Git, Linux, Java에 대한 기초 학습에 대한 간단한 정리를 하고 내가 알고 있는 부분과 알지 못했던 부분을 구분하고 복습하는 시간을 가지겠다.


Session 1 학습 내용

Development

Computer & Programming

  • 컴퓨터의 정의 : 입력받은 데이터로 주어진 규칙에 따라 처리하여 출력하는 장치
  • 구성 요소
    • Hardware : 중앙처리장치, 기억장치, 입력 장치, 출력 장치, 시스템 버스
    • Software : system software(OS, 드라이버), application software(프로그램)
  • Programming : 특정 목적을 달성하기 위해 설계된 알고리즘을 코드로 구현하는 것
    • Program : 명령문의 집합체
    • Compile : 소스코드를 기계어로 변환
    • Build : 소스코드를 결과물로 산출
    • 통합개발환경 IDE(Integrated Development Environment) : 코드 작성 프로그램

Web

  • Client-Server Architecture
    • Client : resource를 사용하는 앱
    • Server : resource 존재하는 곳
  • 3-Tier Architecture
    • Client-Server-DB(Data Base)
    • resource를 저장하는 DB가 추가된 구조

HTML & CSS

HTML

  • HTML(HyperText Markup Language) : 웹 페이지 구성 언어
  • HTML 구조와 문법
    • <h1>, <p>, <div>, <span>, <img src ="__">, <a href="__">, <ol>, <ul>, <input type="__">, <textarea>,<button>

CSS

  • CSS(Cascading Style Sheet) : UI, UX 개선
    • UI : User Interface - 사용자와 컴퓨터의 연결고리
    • UX : User Experience - 서비스 이용 만족도
  • selector{ property : value;}
  • Id & Class
    • Id : #으로 지정, 고유한 값 지정
    • Class : .으로 지정
  • Box model : 웹 페이지를 박스 형태로 구성
    • margin > border > padding > content
    • 박스 측정 기준 : content-box(내용에 따라), border-box(border까지 포함

Page Layout

  • 화면을 나누는 방법(with Flexbox)
  • 부모 요소
    • flex-direction(정렬 축), flex-wrap(자동 줄 바꿈), justify-content(축 수평 방향 정렬), align-items(축 수직 방향 정렬)
  • 자식 요소
    • flex : grow shrink basis

Linux

CLI 기본 명령어

  • pwd(현 디렉터리), mkdir(디렉터리 생성), ls(목록), cd(디렉터리 진입), touch(파일 생성), >(결과 저장), cat(출력)
  • rm(파일 제거 -rf 폴더 내용 제거), rmdir(빈 폴더 제거), mv(이동 or 파일 이름 변경), cp(파일 복사)

관리자 권한과 경로

  • 관리자 권한 : sudo
  • .(현 디렉터리),..(상위 디렉터리), 루트 디렉터리(/)
  • /home/[username](Ubuntu), /Users/[username](MacOs), ~/(사용자 폴더 경로)
  • 절대 경로(기준점 root directory), 상대 경로(기준점 현 디렉터리)

패키지 & 패키지 매니저

  • package : 파일들 모아 놓은 압축 파일
  • package manager : package 위치 저장, 실행, 제거
  • apt install(Ubuntu), brew install(MacOs)

사용 권한

  • chmod ogo =rwx [filename], chmod 666 [filename]

환경 변수

  • 임시 환경변수 : 지역 환경(hello = world), 전역환경( export hello=world), 확인(echo $hello)
  • 영구 환경변수
    • 지역환경 : ~/(사용자 디렉터리)에서. bashrc or. zshrc 편집 export로 선언
    • 전역 환경 : sudo chmod 777 /etc/profile 사용권한 풀고 vi /etc/profile로 편집 후 export 선언

Git

Version Control System : Git

  • Git : 파일 관리 프로그램(버전 관리, 백업, 협업)
  • git init(git system 적용)
  • git add (working directory에서 staging area로 올리기)
  • git commit (staging area에서 local repo로 올리기)
  • git push origin main(local repo에서 remote repo로 올리기)
  • git pull pair main(상대 remote repo에서 내 local repo로 가져오기)
  • git clone URL (remote repo에서 local repo로 가져오기)
  • git restore(commit 하기 전 사항 취소) / git restore --staged(staging 된 상태 취소)
  • git reset -- soft HEAD^(push 한 local repo 내용 돌리기) / --mixed(commit 한 내용 돌리기) / --hard(수정한 내용 돌리기)
  • fork(github에서 상대 remote repo 내용을 내 remote repo로 가져오기)

Java 기초

variable, type, String, operator, console i/o

  • variable : 1byte 단위로 데이터 저장 CamelCase
  • constant : 변하지 않는 값(final) SREAMING_SNAKE_CASE
  • type
    • primitive type : byte, short, int, long, float, double, char, boolean
    • reference type : 주소 값 저장
    • type 자동 변환 : byte(1) > short/char(2) > int(4) > long(8) > float(4) > double(8)
  • literal : 문자 자체가 가지는 값
  • String
    • 리터럴 문자열로 비교하였을 경우 같은 참조값을 가짐(==로 비교 가능)
    • 객체로 비교할 경우 equals로 비교
    • charAt, compareTo(), concat(), indexOf(), trim(), length(), toUpperCase()/toLowerCase()
    • StringTokenizer - countTokens(), hasMoreTokens(), nextToken()
    • StringBuilder - append(), toString()
    • StringBuffer - append(), capacity(), delete(), insert()
  • Operator
    • 산술 연산자(+,=,/,%,*), 증감 연산자(++, --), 복합 대입 연산자(+=,-=,/=,%=,*=)
    • 비교 연산자(>=,<=,<,>), 등가 비교 연산자(!=,==), 논리 연산자(||, &&,!), 조건 연산자(?:)
  • console IO
    • Output : System.out.print() / println() / printf()
    • Input : Scanner - next(), nextInt(), nextFloat(), nextLine()

Control flow statement(제어문)

  • 조건문 : if - else, switch
  • 반복문 : for, while, do -while
  • break;(반복문 탈출), continue;(이하 내용 패스하고 반복)

Array

  • 선언 : int [] arr=new int [30];
  • 순회 : for, while, for-each

OOP

Class

  • Class : 객체 정의 틀
  • instance : class로 만들어진 객체
  • Person(클래스 영역) person(스택에 저장) = new(힙 메모리에 저장) Person()
  • Class member
    • field : class variable(static), instance variable, local variable
    • method : 명령문 / method overloading(매개변수 개수나 타입이 다른 경우)
    • inner class : member inner class (static/instance inner class), local inner class
  • Constructor : 반환형이 없고 class 이름과 같다

Inheritance(상속)

  • 기존 클래스를 재활용하여 extends로 상속
  • method overriding : 상위 클래스의 메서드를 재정의
  • Object : toString(), equals(), hashCode(), wait(), notify()

Encapsulation(캡슐화)

  • 목적 : 데이터 보호, 데이터 은닉
  • package : 클래스나 인터페이스 모음(java.lang, java.util, java.io)
  • Import : 다른 패키지 클래스 사용할 때 사용
  • 접근제어자(access modifier) : private(동일 클래스 내), protected(동일 패키지, 다른 패키지 하위 클래스), default(동일 패키지 내), public(제한 없음)
  • getter & setter : private으로 선언된 필드에 접근

Polymorphism(다형성)

  • 상위 클래스 참조 변수에 하위 클래스 객체 생성 가능
  • 다운 캐스팅(상위 클래스에서 하위 클래스로), 업 캐스팅(하위 클래스에서 상위 클래스로)
  • instanceof 연산자 : 참조 변수 캐스팅이 가능한지 반환

Abstraction(추상화)

  • abstract를 사용하여 추상 메서드 생성 : 바디에 내용이 없다
  • 추상 클래스 :  하나 이상의 추상 메서드 포함
  • 인터페이스 : 추상 메서드와 상수로 구성 / interface로 구현
  • 다중 인터페이스 구현 가능, implement로 구현 가능

Collection

Generic

  • 타입의 일반화
  • 클래스명 뒤에 <T>로 타입 지정
  • Wrapper class로 지정
  • 특정 클래스의 하위 클래스 지정 가능
  • 와일드카드(?)

예외처리

  • 컴파일 에러, 런타임 에러
  • 예외 클래스 : java.lang > Object > Throwable > Error/Exception
  • RuntimeException : 컴파일러가 처리하지 않는(unchecked) - ClassCastException, ArrayIndexOutOfBoundsException, NullPointerException
  • 일반 예외 클래스 : 컴파일러가 처리하는(checked) - ClassNotFoundException, DataFormatException
  • try {예외 발생 가능 코드} catch(Exception e){예외 처리 코드} finally {예외 상관없이 수행}
  • throw(예외 의도적 발생) / throws(예외 책임을 호출한 곳으로 전가)

Collection Framework

  • List : ArrayList, Vector, Stack, LinkedList - 중복 값 허용, 저장 순서 인정(add(), set(), get(), remove())
  • Set : HashSet, TreeSet(오름차순) - 중복 값, 저장 순서 불허(add(), set(), get(), remove())
  • Map : HashMap, HashTable, TreeMap, Properties - key, value의 Entry를 객체로 가짐(put(k, v), get(k), remove(k))
  • ArrayList VS LinkedList
    • ArrayList : 특정 인덱스 접근 유리
    • LinkedList : 중간에 존재하는 객체 추가 삭제 용이
  • Iterator : Collection 객체 순차 접근 / hasNext(), next(), remove()

Effective

Enum(열거형)

  • 상수 사용 용이
  • 선언 : enum 클래스 이름 {... } / .ordinal() 상수 출력

Annotation

  • 정보 전달 타깃이 특정 프로그램으로 주석처리(//)와 구분
  • standard Annotation(@Override, @Deprecated, @SuppressWarnings, @FunctionalInterface)
  • meta Annotation(@Target, @Documented, @Inherited, @Retention, @Repeatable)
  • 사용자 정의 Annotation : @interface로 구현

Lambda

  • (a,b) -> a+b

Functional interface

  • 람다식은 익명 클래스로 Object로 생성하여 만들면 메서드 사용 불가
  • 이에 따라 함수형 인터페이스 선언
  • 인터페이스 안에 1:1 메서드 선언
  • Runnable(run()), Supplier<R>(get()), Consumer<T>(accept()), Function<T,R>(apply())

Method reference

  • static method(클래스이름::메서드이름), instance method(참조변수::메서드이름)
  • 생성자 참조(클래스::new)

Stream

  • 선언형(어떤 업무를 시킬지 작성)
  • 생성 : Arrays.stream(배열), stream(Collection), Stream.of(데이터 소스)
  • 중간 연산 : filter(), distinct(), map(), flatmap(), sorted(), peek()
  • 최종 연산 : forEach(), match(), sum(), count(), average(), max(), min(), reduc(), collect()

Optional

  • 선언 : Optional.of, Optional.ofNullable()
  • OrElse() : null일 경우 인자로 받을 값을 설정
  • OrElseGet(()->System.out.println("null")) : null일 경우에만 인자로 받은 익명 객체 실행

File IO

  • 바이트 기반 스트림
    • FileInputStream, BufferedStream - read(), close()
    • FileOutputStream - write(), close()
  • 문자 기반 스트림
    • FileReader, BufferedReader -  read(), close()
    • FileWriter - write(), close()
  • File class
    • File file =new File(경로와 파일명)
    • .createNewFile 새로운 파일 생성
    • .listFiles() 파일 목록을 File 배열로 반환
    • .getName() 파일 이름 가져오기
    • .renameTo(new file("파일 이름")) 파일 이름 변경

Thread & JVM

Thread

  • Main thread : main method 실행할 때 사용하는 스레드
  • Multi-thread : main thread 이외의 다른 다수의 스레드 사용
  • 생성자에 익명 객체 구현 : Thread thread = new Thread(new Runnable(){ ... });
  • 하위 클래스에서 구현 : Thread thread = new Thread(){ ... };

Thread 동기화

  • critical section(임계 영역)에는 하나의 스레드만 lock이라는 권한을 가지고 작동
  • synchronized(this){ ... } 특정 지역 critical section으로 선언
  • public synchronized void method(){…} method를 critical section으로 선언

Thread 상태 및 제어

  • .start() : 실행 대기 상태(RUNNABLE)
  • Thread.sleep() : 일시정지 상태(TIMED_WAITING)
  • .interrupt() : 실행 대기로 복귀
  • .yield() : 다른 스레드에게 실행 양보
  • .join() : 다른 스레드의 작업이 끝날 때까지 기다림
  • .wait(), .notify() : 두 개의 스레드가 교차 작업

JVM(Java Virtual Machine)

  • java source code(.java) -> java Byte code(.class) -> JVM
  • JVM
    • runtime data area, class loader, excution engine(intepreter, JIT(just-in time) compiler)

Stack & Heap

  • Stack : 메서드가 실행되면 매개변수, 지역변수, 연산 값 등이 스택으로 저장되고 역순으로 제거
  • heap : 하나의 heap 공간, 객체, 인스턴스 변수, 배열을 저장하는 공간

Garbage Collection

  • 더 이상 사용하지 않는 객체 제거
  • Young(minor GC) : 새로운 객체, 생성, 삭제 반복되는 곳
  • Old(Major GC) : Young 영역에서 살아남은 객체 복사되는 곳, 가비지 적게 발생
  • Stop the world(GC를 위해 JVM을 멈춤), Mark and Sweap(사용하지 않는 객체 인식하고 삭제)

  자바의 기초 문법에 대해서 사전 지식이 있었지만, 기억이 나지 않는 부분도 많아 복습을 통해 기초를 다질 수 있는 기회였다. Stream이나 람다식, 애너테이션, 스레드 생성과 작동 방식에 대해서는 학습하지 못했던 부분이라 이번 기회에 새로운 지식을 쌓을 수 있었다. git과 linux도 기초 지식이 있었지만 더욱 능숙하게 사용할 수 있었다. Session 1에서 배운 자바와 프로그래밍 기초 지식은 프로그래밍을 하기에 앞서 다져둘 좋은 기반이 될 것이고 이후에 학습한 내용을 돌아보며 기초 학습을 튼튼히 하는 것이 좋겠다.

'Backend boot camp > Session1' 카테고리의 다른 글

[JAVA] 심화 - Thread, JVM  (1) 2022.09.19
[JAVA] 심화(Effective)  (0) 2022.09.14
[JAVA] 컬렉션(Collection)  (0) 2022.09.06
[JAVA] 객체 지향 프로그래밍 심화  (0) 2022.09.06
[JAVA] 객체 지향 프로그래밍 기초  (0) 2022.09.06