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 |