난 정말 JAVA를 공부한 적이 없다구요

독서평

도서관에서 가장 최근에 나온 JAVA 기본서여서 덥석 보게 되었습니다.
제목에서 알 수 있다시피 JAVA를 공부하지 않은 초보자를 대상으로 하기 때문에 학원에서 강의하듯 알고 있는 부분들은 빨리 넘어가실 수 있습니다.
또한 저자가 강의를 하는 듯한 필체로 글이 쓰여 있어서 마치 학원 강의를 듣는듯한 느낌을 갖게 됩니다.
전반적인 난이도는 낮지만 초보자들이 꼭 알아야 할 요소들을 필요한 부분에 배치하였기 때문에, 중급자 이상이신 분들도 리마인드하는 셈치고 보셔도 좋을듯합니다.
참고로 2009년 08월 12일 출간이며, JDK 6 Update 11을 기준으로 설명되어 있습니다.

nan_java

목차 및 내용정리

아래 내용은 목차별로 개인적으로 정리한 내용입니다.
빠르게 정리한 내용이므로 문법이 틀리거나 오타가 있을 수도 있습니다.

Chapter 01. Let’s Start JAVA!

01-1. 자바의 세계로 오신 여러분을 환영합니다.
01-2. 자바 프로그램의 이해와 실행의 원리
01-3. 첫 번째 자바 프로그램의 관찰과 응용
01-4. 컴파일의 대상에서 제외되는 주석!

Chapter 02. 변수(Variable)와 자료형(Data Type)

02-1. 변수의 이해와 활용
02-2. 정수 표현방식의 이해
02-3. 실수 표현방식의 이해
02-4. 자료형의 이해
  • 실수표현
    • IEEE754에 따라 저장함.
    • 정밀도를 포기함 (double num = 1.000001; 이 표현은 1.000001에 가까운 수를 저장함을 의미함)
    • 실수형은 정밀도 기준으로 선택하라 : float – 4byte(6자리 정밀도), double – 8byte (15자리 정밀도)
    • double e = 1.2e-3; (1.2*10^-3 을 의미)
  • 정수표현
    • 대부분의 cpu가 int에서 고속연산함.
    • 따라서 byte/short 연산시 int로 변환하는 과정을 거치므로, 연산이 필요하면 int를 사용하라. byte/short는 저장의 용도로 사용하라.
    • int num = 0xA0E; (0X : 16진수)
    • int num = 0752; (0 : 8진수)
  • 문자
    • char ch = ‘한’;
    • char ch = 54260;

Chapter 03. 상수와 형 변환(Type Casting)

03-1. 자료형을 기반으로 표현이 되는 상수
03-2. 자료형의 변환
  • 상수도 메모리에 저장됨. 변수처럼 변경되지 않음. 상수=리터럴(literal)
  • 모든 정수(1, 2, 3…)은 int로 표현 및 저장됨 : 4byte
  • 모든 실수(1.2, 1.3…)은 double로 표현 및 저장됨 : 8byte
  • 자동 형변환 (implict conversion)
    • double num = 20; (20은 정수 -> 실수인 double로 형 변환됨 -> 20.0)
    • byte -> short -> int -> long -> float -> double
    • char -> int -> long -> float -> double
  • 명시적 형 변환 (Explicit Conversion)
    • int num = (int)3.15; // 3

Chapter 04. 연산자(Operator)

04-1. 자바에서 제공하는 이항 연산자들
04-2. 자바에서 제공하는 단항 연산자들
04-3. 비트와 관련이 있는 연산자들
  • 이항 연산자 (binary operator) : 피연산자가 2개
  • Short-Circuit Evaluation (Lazy Evaluation)
    • 가장 빠르게 연산을 진행하기 위한 계산방식
    • false && XXXX : XXXX는 볼 필요 없음
    • true || XXXX : XXXX는 볼 필요 없음
    • XXXX 에서 대입이 일어나지 않아야 함

Chapter 05. 실행흐름의 컨트롤

05-1. if 그리고 else
05-2. switch와 break
05-3. for, while 그리고 do~while
05-4. continue & break
05-5. 반복문의 중첩
  • if ~ else ~
  • switch { case ~ }
  • while(조건) { ~ }
  • do { ~ } while(조건)
  • for( ~ ) { ~ }
  • for(int i=0, j=7; i<j; i++, j–) { ~ }
  • continue, break : 가장 근접한 반복문에 적용

Chapter 06. 메소드와 변수의 스코프

06-1. 메소드에 대한 이해와 메소드의 정의
06-2. 변수의 스코프
06-3. 메소드의 재귀호출

Chapter 07. 클래스와 인스턴스

07-1. 클래스의 정의와 인스턴스의 생성
07-2. 생성자(Constructor)
07-3. 자바의 이름 규칙(Naming Rule)
  • final : 상수화 시키는 키워드, 한번의 초기화 가능
  • Naming Rule
    • 클래스 : 대문자로 시작, CirclePoint
    • 메소드, 변수 : 카멜 표기법, addYourMoney
    • 상수 : 대문자, final int COLOR_RAINBOW = 7;

Chapter 08. 클래스 패스와 패키지

08-1. 클래스 패스(Class Path)의 지정
08-2. 패키지(Package)의 이해
  • 클래스 패스 : set classpath=.;c:\my\sub;
  • 패키지

Chapter 09. 접근제어 지시자와 정보은닉, 그리고 캡슐화

09-1. 정보은닉(Information Hiding)
09-2. 접근제어 지시자(Access Control Specifiers)
09-3. public 클래스와 default 클래스
09-4. 어떤 클래스를 public으로 선언할까요?
09-5. 캡슐화(Encapsulation)
  • 접근제어
    • private : 클래스 내부에서만 접근
    • public : 모든 클래스에서 접근
    • protected : 동일 패키지(=default) & 상속한 클래스에서 접근
    • X : 아무것도 없으면 default. 동일 패키지에서 접근
  • 접근 범위 : public > protected > default > private
  • Access 메소드
  • default 생성자는 클래스의 접근제어 지시자와 동일한 것으로 선언됨.

Chapter 10. 클래스 변수와 클래스 메소드

10-1. static 변수(클래스 변수)
10-2. static 메소드(클래스 메소드)
10-3. System.out.println & public static void main
  • static 변수
    • 모든 인스턴스가 공유 (public)
    • 하나의 메모리 공간만 사용
    • 인스턴스화 되기 전에 메모리 공간에 할당되어 초기화됨 (인스턴스 생성없이 new 사용가능)
    • static 변수의 초기화는 JVM에 의해 메모리 공간에 올라감 (on-demand)
    • instance간 data 공유 필요시 사용 (static final double PI = 3.14;)
  • static 메소드
    • 인스턴스 변수를 사용할 수 없다 (static 메소드, static 변수는 공유되지만 인스턴스 변수는 공유되지 않기 때문)
  • java에서 메소드는 자신이 속한 클래스의 인스턴스 생성이 가능

Chapter 11. 메소드 오버로딩과 String 클래스

11-1. 메소드 오버로딩(Overloading)
11-2. String 클래스
11-3. API Document의 참조를 통한 String 클래스의 인스턴스 메소드 관찰
11-4. StringBuilder & StringBuffer 클래스
11-5. 단계별 프로젝트: 전화번호 관리 프로그램 01단계
  • 오버로딩 (overloading)
  • 생성자 오버로딩
  • String
    • 큰 따옴표만으로 인스턴스 생성 가능 : String str = “kimstar”;
    • 당연히 인스턴스 메소드 실행가능 : “kimstar”.length();
    • String a = “A”; String b = “A”; 와 같을때 동일한 문자열은 중복하여 인스턴스화 되지 않는다. a와 b는 같은 메모리에 담긴 “A”를 참조한다.
    • 문자열은 상수처럼 사용되고 변경되지 않는다. 따라서 문자열이 바뀌면 새로 만들어서 처리한다.
  • 문자열 결합 최적화
  • StringBuilder / StringBuffer는 사용법이 똑같다.
    • StringBuilder : thread-safe. JDK 1.5 이상
    • StringBuffer : thread-unsafe. JDK 1.0 이상

Chapter 12. 콘솔 입력과 출력

12-1. 콘솔 출력(Console Output)
12-2. 콘솔 입력(Console Input)
12-3. 단계별 프로젝트: 전화번호 관리 프로그램 02단계

Chapter 13. 배열(Array)

13-1. 배열이라는 존재가 필요한 이유
13-2. 1차원 배열의 이해와 활용
13-3. 다차원 배열의 이해와 활용
13-4. for-each
13-5. main 메소드로의 데이터 전달
13-6. 단계별 프로젝트: 전화번호 관리 프로그램 03단계

Chapter 14. 클래스의 상속 1: 상속의 기본

14-1. 상속은 재활용 + 알파(α)
14-2. 상속의 기본문법 이해
14-3. 상속과 접근제어 지시자
14-4. static 변수(메소드)의 상속과 생성자의 상속에 대한 논의
  • 상속 이모저모
    • 객체지향 패러다임은 재활용 관점에서는 실패한 패러다임이다.
    • 재활용을 위해 상속을 사용하지 마라. (재활용하는 것이 새로 만드는 것보다 공수가 많음. 재활용을 위한 디자인은 어렵다)
    • 상속을 통해 일련의 클래스에 대한 공통 규약을 정의할 수 있다.
  • 용어 정리
    • 상속받은 클래스 : 하위 클래스 (sub class), 유도 클래스 (derived class)
    • 상속한 클래스 : 상위 클래스 (super class), 기초 클래스 (basic class)
  • super(…) : 상위 생성자 호출하여 초기화

  • 디폴트 생성자

Chapter 15. 클래스의 상속 2: 오버라이딩

15-1. 상속을 위한 관계
15-2. 하위 클래스에서 메소드를 다시 정의한다면?
15-3. 참조변수의 인스턴스 참조와 instanceof 연산자
  • Is-a 관계 : 무선전화기는 전화기이다.
  • Has-a 관계 : 경찰은 총을 가지고 있다.
    • 이 경우는 총을 경찰의 멤버로 가지는게 더 좋다.
    • 총없는 경찰을 위해 코드가 더 많이 생성된다.
    • 전기봉, 수갑 등을 가질 경우, 다중 상속해야 하는가?
  • 오버라이드 : 하위 클래스에서 상위 클래스 재정의 –> 상위 클래스 메소드는 하위 클래스 매소드에 “가려진다”
  • 상속 확인

Chapter 16. 클래스의 상속 3: 상속의 목적

16-1. 개인정보 관리 프로그램
16-2. 모든 클래스가 상속하는 Object 클래스
16-3. final 클래스와 final 메소드
16-4. 단계별 프로젝트: 전화번호 관리 프로그램 04단계
  • 상속을 통해 연관된 일련의 클래스에 대한 “공통적인 규약”을 정의할 수 있다.
  • 위의 코드의 문제점과 해결
    • Friend는 상속을 위해서만 만들어지고 하는게 없다.
    • 이 경우 추상 클래스를 만드는게 좋다. showBasicInfo는 추상메소드로 만들어라.
    • 추상 클래스로 만들면 아무것도 안하고 상속을 위해서만 만든 Friend 객체를 만들 수 없다.

Chapter 17. abstract와 interface 그리고 inner class

17-1. abstract 클래스
17-2. interface
17-3. Inner 클래스
17-4. Local 클래스와 Anonymous 클래스
17-5. 단계별 프로젝트: 전화번호 관리 프로그램 05단계
  • abstract : 추상 –> 완전치 않은
  • interface
    • 다중 상속은.. 그냥 문법적인 얘기이다. 실무에서 다중 상속 용도로 거의 사용하지 않는다.
    • A 클래스의 완성까지 못 기다리는 B 클래스 만들때 사용.
    • A 클래스 내부는 관심없고, A의 인스턴스를 사용하여 B 클래스를 개발하고 싶을때
    • instance는 약속이다.
  • interface를 abstract class로 변환 가능하다.
  • interface를 열거형 처럼 사용 (boolean이 없을때 사용하던 방법 같음)
  • interface를 어떠한 능력이 있음을 표시하기 위해 사용
  • Inner Class
  • Nested Class : Inner Class가 static 일때
  • Inner / Nested Class : 관계가 긴밀한 클래스를 논리적으로 묶기 위해 사용됨. 캡슐화와 가독성으로 인해 유지보수성 높아짐
  • Local Class
    • Inner 클래스와 유사하지만 메소드내에 정의되고, 정의된 메소드 내에서만 인스턴스 생성과 참조변수 선언이 가능하다.
    • 바깥에서도 사용하고 싶으면, Interface의 도움을 받아야 함.
    • 매개변수는 final로만 사용가능 (메소드가 종료되면 매개변수도 사라지는데, Local 클래스에서 사용한 매개변수를 메모리에 저장하기 위해서는 final을 쓸 수 밖에 없어서 이렇게 강요당함)
  • Annonymous 클래스 : 이름이 없는 local 클래스

Chapter 18. 예외처리(Exception Handling)

18-1. 예외처리에 대한 이해와 try~catch문의 기본
18-2. 프로그래머가 직접 정의하는 예외의 상황
18-3. 예외 클래스의 계층도
18-4. 단계별 프로젝트: 전화번호 관리 프로그램 06단계
  • try ~ catch
  • Throwable 하위 클래스
    • Exception : RuntimeException 등
    • Error : VitualMachinError 등
  • 사용자 정의 exception

Chapter 19. 자바의 메모리 모델과 Object 클래스

19-1. 자바 가상머신의 메모리 모델
19-2. Object 클래스
  • java의 메모리 모델 = VM의 메모리 관리방식
    • 메소드 영역 : 메소드의 바이트코드 & Static 변수를 저장 ==> main도 메소드이므로 대부분의 프로그램 흐름이 들어간다)
    • 스택 영역 : 지역변수, 매개변수 저장 ==> 메소드 내에서만 유효한 것들
    • 힙 영역 : 인스턴스 ==> 스택영역의 참조변수가 이곳의 인스턴스를 참고함. 인스턴스 소멸은 VM이 담당한다(GC)
  • Object 클래스의 finalize()
    • protecte void finalize() throws Throwable
    • 인스턴스가 소멸되기 전에 반드시 호출됨
    • GC를 강제로 실행하기
  • 비교문
    • == : 참조변수의 참조값을 비교
    • equals : 인스턴스의 값을 비교
  • Object 클래스의 clone() 메소드
    • protecte void clone() throws CloneNotSupportException
    • 인스턴스의 복제
    • clonable 인터페이스를 구현해야 함
    • deep copy를 위해서는 clone 메소드를 오버라이딩하여 사용해야 함.
    • 단, String 인스턴스는 deep copy 하지 않아도 된다.

Chapter 20. 자바의 다양한 기본 클래스

20-1. Wrapper 클래스
20-2. BigInteger 클래스와 BigDecimal 클래스
20-3. Math 클래스와 난수의 생성, 그리고 문자열 토큰(Token)의 구분
  • Wrapper 클래스
    • Boolean, Integer, Charater, Byte, Short, Long, Float, Double
    • Integer — unboxing –> int
    • Integer <-- boxing --> int
  • 매우 큰수 표현
  • BigDecimal
  • Math 클래스 : static 멤버로만 구성.
  • 난수
  • StringTokenizer

Chapter 21. 제네릭(Generics)

21-1. 제네릭 클래스의 이해와 설계
21-2. 제네릭을 구성하는 다양한 문법적 요소
  • 제네릭 : 자료형의 일반화

Chapter 22. 컬렉션 프레임워크(Collection Framework)

22-1. 컬렉션 프레임워크의 이해
22-2. Collection 인터페이스를 구현하는 제네릭 클래스들
22-3. Set 인터페이스를 구현하는 컬렉션 클래스들
22-4. Map 인터페이스를 구현하는 컬렉션 클래스들
22-5. 단계별 프로젝트: 전화번호 관리 프로그램 07단계
  • 프레임워크 : 골격. 설계의 원칙과 구조가 정의됨(라이브러리와의 차이점)
  • 컬렉션 : 자료구조 & 알고리즘
    • 자료구조 : array, list, stack, queue, tree, hash ….
    • 알고리즘 : sort, search ….
  • 인터페이스 구조 (java.util 에 정의됨)
    • Collection <-- Set, List, Queue
    • Map<K, V>
  • List 인터페이스
    • List <-- ArrayList, LinkedList
    • ArrayList : 배열 기반. 길이를 늘리거나 삭제시 부하 많음. 참조가 빠름
    • LinkedList : 링크드 리스트 기반. 길이를 늘리거나 삭제가 간단. 참조가 불편
  • Iterator 인터페이스
    • 반복자
    • collection 인터페이스에 iterator() 메소드 정의됨
      • iterator() 반환형은 Iterator 인터페이스임
      • descendingIterator()는 내림차순으로 정렬됨
    • 주요 메소드
      • boolean hasNext()
      • E next()
      • void remove()
  • Set 인터페이스
    • Set = 집합 : List와 달리 중복 안됨. 순서는 유지하지 않는다.
    • HashSet 클래스
      • 해쉬값을 계산하여, 이에 속하는 Set(집합)을 찾는다.
    • TreeSet 클래스
      • Set 인터페이스의 구현 클레스. 중복 안됨
      • Tree : 정렬됨
      • 정렬을 위해 필요시 Comparable 인터페이스 구현해야 함. 참고로 Integer에는 이미 구현되어 있다.
  • Map<K, V> 인터페이스
    • Key는 중복 안됨, Key가 다르면 Value는 중복 가능
    • HashMap<K, V> 클래스 : Hash 알고리즘 기반 – 빠른 검색
    • TreeMap<K, V> 클래스 : Tree 알고리즘 기반 – 정렬되어 저장됨

Chapter 23. 쓰레드(Thread)와 동기화

23-1. 쓰레드의 이해와 생성
23-2. 쓰레드의 특성
23-3. 동기화(Synchronization)
23-4. 새로운 동기화 방식
  • 쓰레드 생성 #1 : Thread 상속
  • 쓰레드 생성 #2 : 다른 클래스를 상속받아야 하면, 다중 상속을 위해 Runable 인터페이스를 구현
  • 쓰레드 스케쥴링
    • 우선순위가 높은 쓰레드 우선 실행
    • 우선순위가 동일한 쓰레드는 CPU 할당 시간을 분배함
    • setPriority(int) 메소드 : 1(낮음)~10(높음)까지 우선순위 설정. 10단계는 OS마다 다를 수 있으므로 thread.MAX_PRIORITY 같은 상수를 사용하라.
    • getPriority() : 현재 쓰레드의 우선순위를 리턴
  • 쓰레드 생명주기
    • new : 인스턴스화가 된 상태
    • runnable : new상태에서 start() 호출후 “실행 가능”한 상태. 스케쥴러가 실행의 대상으로 선택해야 run() 호출하여 “실행”된다.
    • dead : run()을 빠져나옴. 할당된 메모리 반환하고 끝난다.
    • blocked
      • sleep(), join() 메소드 호출시, cpu 필요없는 입출력 연산시
      • cpu를 다른 thread에게 양보하고, 위의 조건이 해소되면 runnable 상태로 이전
  • 쓰레드의 메모리 구조
    • 각 쓰레드는 스택 영역을 할당받음
    • main 쓰레드의 메소드 영역과 힙 영역은 공유하여 사용함 –> 동기화 필요
  • 동기화 #1 : 동기화 메소드

  • 동기화 #2 : 동기화 블록
  • thread 실행 순서 제어
    • wait() : 누군가 깨워주기 기다림
    • notify() : 하나의 쓰레드 깨움
    • notifyAll() : 모든 쓰레드 깨움
  • java.util.concurrent 패키지
    • java 5.에서 등장

Chapter 24. 파일과 I/O 스트림

24-1. File I/O에 대한 소개
24-2. 필터 스트림의 이해와 활용
24-3. 문자 스트림의 이해와 활용
24-4. 스트림을 통한 인스턴스의 저장
24-5. Random Access 파일과 FILE 클래스
24-6. 단계별 프로젝트: 전화번호 관리 프로그램 08단계
  • InputStream 클래스
    • InputStream <– FileInputStream, XxxInputStream
    • InputStream : 바이트 단위로 읽어들이는 모든 입력 스트림의 상위 클래스
    • abstract read() : 하위 클래스별로 읽는 방법이 다르므로 하위에서 구현해야 함. 더 이상 읽을게 없으면 -1
    • close()
  • 필터 스트림

  • 버퍼링 기능 제공하는 필터 스트림

    • BufferedInputStream
    • BufferedOutputStream : 버퍼가 꽉 차면 전송함. flush()하면 바로 전송함. close()될때 자동으로 flush()되니까 성능상 필요시만 flush()사용
  • 버퍼링 & 실수형 저장하기 위한 스트림 조합

  • 문자 스트림

    • java는 유니코드로 문자를 표현한다.
    • OS 인코딩에 맞춰 저장하고 읽기 위해서는 문자 스트림을 사용하라
    • 최상위 클래스 : Reader, Writer
      • Reader <– FileReader
      • Writer <– FileWriter
    • 버퍼 사용 : BufferedReader, BufferedWriter
      • 성능의 차이가 크기 때문에 이거 많이 쓰자.
    • PrintWriter : PrintStream의 개선판. PrintStream의 Stream은 바이트 스트림을 의미하므로 문자열 처리에 적절치 않기 때문
  • 스트림을 통한 인스턴스 처리
    • ObjectInputStream : readObject()
    • ObjectOutputStream : writeObject()
    • 입출력 대상이 되는 인스턴스 클래스는 Serializable 구현해야 함. 이 클래스가 참조하는 인스턴스 변수도 Serializable 구현해야 함.
    • 직렬화 대상에서 제외하고 싶은 인스턴스 변수 앞에는 transient 라고 선언
  • RandomAccessFile 클래스
    • 특징
      • 입/출력 동시에 가능
      • 입/출력 위치 변경 가능
      • 파일만을 대상으로 한다.
    • getFilePointer() : 현재 FP 위치를 리턴

    • seek(long pos) : FP 이동
    • readXXXX(), writeXXXX() : 동작을 수행후 FP가 이동된다.
  • File 클래스

    • 특징
      • 디렉토리 생성/소멸
      • 파일 소멸
      • 디렉토리 파일 이름 출력
    • getAbsoluitePath() : file의 절대 경로 리턴
    • 참고사항
      • File.seperator : 윈도우 “\”, 리눅스 “/” 리턴
      • System.getProperty(“user.dir”) : 현재 디렉토리의 절대 경로 리턴

Chapter 25. Swing 컴포넌트와 이벤트 핸들링

25-1. Swing을 시작하기에 앞서
25-2. Swing 컴포넌트와 이벤트 핸들링
25-3. 레이아웃 매니저(Layout Manager)
25-4. 이벤트와 이벤트 리스너(Event Listener)
25-5. 다양한 Swing 컴포넌트
25-6. 단계별 프로젝트: 전화번호 관리 프로그램 09단계
  • AWT : 초기 GUI는 AWT 패키지를 사용 – OS 종속적
  • Swing : GUI를 순수 자바로 구현 – OS 비종속적
  • SWT : 이클립스에서 개발

CC BY-NC-ND 2.0 KR

이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스

저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.

댓글 남기기