1 of 26

자바민국

1회차

2 of 26

스터디 소개

  • Java에 대한 지식을 빠르게 되새기는 스터디
  • 일단 제가 강의하는 방식으로 진행 될 예정입니다.
    • 혹시 자신이 진행해보고 싶다하면 연락 기다리겠습니다.
  • 실습은 최대한 안 할 예정입니다.
  • 매주 목요일 오후 8시에 진행합니다.

3 of 26

진행 내용

  • Ch 1. 자바의 이해
  • Ch 2. 자바 기본
  • Ch 3. 객체지향의 기초 1
  • Ch 4. 객체지향의 기초 2
  • Ch 5. 유용한 패키지와 클래스
  • Ch 6. 컬렉션 프레임워크
  • Ch 7. 제네릭, 열거형, 애너테이션, 스레드
  • Ch 8. 람다, 스트림, 입출력, 직렬화
  • Ch 9. 네트워킹
  • Ch 10. 자바의 활용

4 of 26

자바란?

  • 1995년에 만들어짐
  • 현재 자바 14버전까지 업데이트 되어있음
  • 제임스 고슬링이 만듬.
  • Oak라는 언어를 인터넷에 적합하도록 만듬

5 of 26

자바란?

  • 카카오, 네이버 등 다양한 회사에서 사용함.
  • 웹, 안드로이드 분야에서 주로 쓰임.

6 of 26

자바의 특징

  • 운영체제에 독립적이다.
  • 객체지향 언어이다.
  • 자동으로 메모리 관리를 해준다.
  • 오픈소스이다.
  • 멀티스레드를 쉽게 구현할 수 있다.
  • 동적 로딩(Dynamic Loading)을 지원한다
  • 비교적 속도가 느리다.
  • 예외처리가 불편하다.

7 of 26

자바의 특징 - OS에 독립적

  • JVM에서 동작하기 때문에, 특정 운영체제에 종속되지 않는다.

8 of 26

자바의 특징 - 객체지향

  • 객체지향적으로 프로그래밍 하기 위해 여러 언어적 지원을 하고있다. (캡슐화, 상속, 추상화, 다형성 등)
  • 객체지향 패러다임의 특성상 비교적 이해하고 배우기 쉽다.

9 of 26

자바의 특징 - 메모리 관리

  • JVM에서 Garbage Collector라고 불리는 데몬 쓰레드에 의해 GC(Garbage Collection)가 일어난다.
  • GC로 인해 별도의 메모리 관리가 필요 없으며 로직에 집중할 수 있다.

10 of 26

자바의 특징 - 오픈소스

  • 많은 Java 개발자가 존재하고 생태계가 잘 구축되어있다. 덕분에 오픈소스 라이브러리가 풍부하며 잘 활용한다면 짧은 개발 시간 내에 안정적인 애플리케이션을 쉽게 구현할 수 있다.
  • 정식 JDK는 오라클 몫이라 OpenJDK가 오픈소스로 공개되어 있음.

11 of 26

자바의 특징 - 멀티스레드

  • 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.

12 of 26

자바의 특징 - 동적 로딩

  • 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다.
  • 유지보수 시 해당 클래스만 수정하면 되기 때문에 전체 애플리케이션을 다시 컴파일할 필요가 없다. 따라서 유지보수가 쉽고 빠르다.

13 of 26

자바의 특징 - 속도

  • 자바는 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다.
  • 그러나 하드웨어의 성능 향상과 바이트 코드를 기계어로 변환해주는 JIT 컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄어들었다.

14 of 26

자바의 특징 - 예외처리

  • 프로그래머 검사가 필요한 예외가 등장한다면 무조건 프로그래머가 선언을 해줘야 한다.

15 of 26

자바 프로그램의 실행 과정

  • C/C++ : 컴파일 후 .obj 파일 생성, .obj 파일을 링커가 .exe 파일로 만들어 줌.
  • Java : 컴파일 후 .class 파일 생성, .class 파일을 JVM에서 기계어로 변환

16 of 26

JVM(Java Virtual Machine)

  • 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 함
  • 프로그램 메모리를 관리하고 최적화함
  • JRE(Java Runtime Environment) = JVM + 라이브러리
  • JDK (Java Development Kit) = JRE + 개발 도구

17 of 26

JVM(Java Virtual Machine)

  • JVM은 크게 4가지 영역으로 구분됨
  • Class Loader
    • 로딩 : .class 파일에서 필요한 데이터를 메모리에 저장
    • 링크 : 유효성, 메모리 체크
    • 초기화 : static 초기화
  • Execution Engine
    • .class 파일을 기계어로 변경/실행
  • Runtime Data Area : 메모리
    • Stack 영역, Heap 영역
  • Native :

18 of 26

변수

  • 기본 데이터 타입과 참조 타입으로 나눔
    • 기본 데이터 타입 : Stack 영역에 할당
    • 참조 타입 : Heap 영역에 할당

19 of 26

형변환

  • 형변환
    • 묵시적 형변환(Promotion) : 작은 타입이 큰 타입으로 변환
    • 명시적 형변환(Casting) : 변환할 자료형을 명시해줘야되는 형변환

20 of 26

연산자

  • 연산자의 종류
    • 산술 연산자 : +, -, *, /, %
    • 대입 연산자 : =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>=
    • 증감 연산자 : ++, --
    • 비교 연산자 : ==, !=, <, >, <=, >=
    • 논리 연산자 : &&, ||, !
    • 비트 연산자 : &, |, ^, ~, <<, >>, >>>
    • 삼항 연산자 : ?:
  • 자료형이 다른 두 타입의 연산
    • 타입 일치 : int+long=long, float+int=float
    • 둘다 int보다 작은 타입이면 int로 : byte+char=int

21 of 26

조건문과 반복문

  • 조건문 : if, if/else, if/else if/else
  • 반복문 : while, do/while, for, foreach
  • 흐름 제어 : continue, break
  • 이름을 가지는 반복문 - goto의 대용`

22 of 26

자바 배열

  • 1차원 배열
  • 다차원 배열
  • 가변 배열

23 of 26

자바 배열

  • foreach 문
    • 크기가 정해진 배열이나 컬렉션의 길이만큼 반복되어 실행됩니다.
    • 루프마다 각 요소는 명시한 변수의 이름으로 저장됨.

24 of 26

String

  • char 배열에 여러 기능(메서드)가 추가된 클래스
  • 새로운 값을 할당할 때마다 새로 클래스에 대한 객체가 생성된다 - Immutable
    • 문자열 연산시 각각의 String 주소값이 Stack에 쌓이고, Garbage Collector가 호출되기 전까지 생성된 String 객체들은 Heap에 쌓이기 때문에 메모리 관리에 치명적이다.

25 of 26

String

  • 문자열 연산을 많이 해야될 경우 StringBuffer와 StringBuilder 사용을 고려해보아야 함.
    • 문자열 연산시 새로 객체를 만들지 않고, 크기를 변경시킴
    • StringBuffer는 Thread-Safe함 / StringBuilder는 Thread-safe하지 않음

26 of 26

과제

  1. 맥주 99병 문제 풀기

백준 언어별 도움말 참조