관리 메뉴

제뉴어리의 모든것

남궁성님의 자바의 정석 정리 1 본문

JAVA

남궁성님의 자바의 정석 정리 1

제뉴어리맨 2021. 4. 18. 15:07

ch1-1,2

자바 :

- 어플리케이션 만드는데 사용

-프로그래밍 언어

-실행환경(jre) + 개발도구(jdk) + 라이브러리(api)

 

+ 라이브러리란?

미리 만들어 놓은 모듈

 

ch1-3,4

=> 자바 특징:

- 배우기 쉬운 객체지향 언어

프로그래밍언어 + 객체지향

- 자동 메모리 관리 (가비지 컬렉터, GC)

가비지 컬렉터가 사용했던 메모리를 알아서 반환해줌

- 멀티 쓰레드 지원

하나의 프로그램에서 동시에 여러 작업 가능

- 풍부한 라이브러리로 쉽게 개발 가능

- 운영체제에 독립적

 

=> 자바 가상 머신(JVM)

자바 프로그램이 실행되는 가상 컴퓨터(VM)

한번 작성하면, 어디서든 실행(Write once, run anywhere)

 

=> App 실행 환경

 

일반 앱 환경 (3단계)

APP

OS

HW

 

Java 앱 환경 (4단계)

Java APP

JVM

OS

HW

 

 

ch1- 5,6

=> 자바 버전

JAVA SE 8u111 : 자바 스탠다드 에디션 8버전의 111번째 

 

=> cmd 명령어

- javac.exe - 

자바 컴파일러. 사람이 작성한 문장을 기계어로 번역

소스파일(*.java)을 클래스파일(*.class) 로 변환

 

- java.exe - 

1. 자바 인터프리터. 자바 프로그램(클래스파일)을 실행.

2. 클래스파일을 읽어서 실행

 

=> 자바 기본 개념

- 클래스 - 자바 프로그램의 단위. 자바 프로그램은 최소 한개의 클래스는 존재.

- 자바는 모든 내용이 클래스 안에 조재해야 한다.

- main 메서드 - 자바 프로그램의 시작점. 

해당 메서드 없이 실행 불가

 

ch2-3

=> 변수

-변수란?

하나의 값을 저장할 수 있는 메모리 공간.

오직 하나의 값만 저장 가능.

 

- 변수의 선언

1. 변수의 선언 이유:  값을 저장할 공간을 마련하기 위해서

2. 변수의 선언 방법 : 

 

- 변수에 값 저장하기

1. 변수에 값 저장하기

2. 변수의 초기화

int x = 0, y = 5; 가능

 

- 변수의 종류

클래스 변수

인스턴스 변수

지역 변수

0으로 자동 초기화 안됨.

안그렇다면 컴파일때 에러.

 

- 변수의 값 읽어오기

 

ch2-4  변수의 타입

변수타입과 저장할 값의 타입이 같아야함.

 

=> 값의 타입

8개 기본형 

- 문자 : char

- 숫자 : 

정수 : byte, short, int, long

실수 : float, double

논리 : boolean

 

 

ch2-6 리터러의 타입과 점미사

=> 리터럴의 접두사와 접미사

논리형, 정수형, 실수형, 문자형, 문자열

 

- 정수형과 실수형은 접미사를 붙여야 구별 가능

정수는 리터럴에 아무것도 안 붙이면 기본이 int.

실수는 리터럴에 아무것도 안 붙이면 기본이 double.

 

 

정수형

- byte, short, int는 그냥 똑같이 값을 대입함.

예)

byte a = 11;

short a = 11;

int a = 11;

 

- long형은 L 접미사 붙임

long a = 100L;

 

실수형

float

 

=> 리터럴의 접두사와 접미사

- 문자형 : '\n' (줄바꿈 문자 = 개행문자)

 

=> 변수와 리터럴의 타입 불일치

1. 범위가 '변수 > 리터럴'  경우 OK                 ---(그릇 > 물건)

ex)

int i = 'a'; 가능 -> int > char 이므로

long l = 123; 가능 -> long > int 이므로

 

 

2. 범위가 '변수 < 리터럴' 인 경우, (에러)

int i = 30_0000_0000; //30억, int의 범위 (+-20억) 벗어남

long l = 3.14f; -> long(8byte), float(4byte) 이지만 실수형은 정수형보다 저장범위가 더 넓어서 에러

float f = 3.14; -> float < double 이므로 에러 

 

3. byte, short 변수에 int리터럴 저장 가능.

단, 변수의 타입의 범위 이내여야 함.

 

byte b = 100; -> OK, 범위(-128~127 이내)

byte b = 128; -> 에러, 범위 밖임

 

ch2-7,8 문자, 문자열 리터럴, 문자열 결합

=> 문자와 문자열

String s1 = "AB"; ("AB"의 주소는 갖는 s1)

String s = ""; -> 가능한 빈 문자열

char ch = ''; -> 에러

String s1 = "A" + "B"; -> 결과 : "AB"

String s = "" + 7; -> "" + "7" -> 결국 "7"  (숫자 -> 문자열로 바꿈)

+ 문자열 결합은 왼쪽에서 오른쪽으로 진행되므로 순서에 따라 결과가 다름

ex)

""+7+7 -> "7"+7 -> "7"+"7" ->"77" (문자열"77")

7+7+"" -> 14+"" + "14"+ "" -> "14"

 

 

ch2-17 타입간의 변환방법

1.문자와 숫자간의 변환

 

ex)

3  --변환--> '3'  - 방법 : 3 + '0'

3  <--변환-- '3'  - 방법 : 3 - '0'

 

2. 문자열로의 변환

3 --변환--> "3" - 방법 3 + ""

'3' --변환--> "3" - 방법 '3' + ""

"3" --변환--> 3 - 방법 Integer.parseInt("3")

"3.4" --변환--> 3.4 - 방법 Double.parseDouble("3.4")

 

ch5-2 배열의 선언과 생성

선언 방법

1. 타입[] 변수이름; -> int[] score;

2. 타입 변수이름[]; -> int score[];

 

배열과 선언 예

타입[] 변수이름; : 배열을 선언 (배열을 다루기 위한 참조변수 선언)

변수이름 = new 타입[길이]; : 배열을 생성 (실제 저장공간을 생성)

 

ch11-1 컬렉션 프렘임웍

컬렉션 

여러 객체(데이터)를 모아 놓은것

프레임웍 (틀작업)

표준화, 정형화된 체계적인 프로그래밍 방식

라이브러리

누군가 이미 만들어 놓은 정보(모듈)

 

컬렉션 프레임웍

- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식

- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공

- java.util 패키지에 포함. JDK1.2부터 제공 (이전에도 있었지만 표준화가 안되있었음)

 

컬렉션 클래스

다수의 데이터를 저장할 수 있는 클래스 (Vector, ArrayList, HashSet)

 

 

ch11-2 컬렉션 프레임웍의 핵심 인터페이스

List 

순서, 중복 있음

- (저장)순서가 있는 데이터의 집합. 데이터의 중복을 허용한다.

예) 대기자 명단

- 구현 클래스 : ArrayList, LinkedList, Stack(표준화전), Vector(표준화전) 등

 

Set (집합) (햄버거 세트)

순서, 중복 없음

순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.

예) 양의 정수집합, 소수의 집합

- 구현 클래스 : HashSet, TreeSet 등

 

Map

순서 있음. 키는 중복 X 그러나 값은 O

키와 값의 쌍으로 이루어진 데이터의 집합.

순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.

예) 우편번호, 지역번호(전화번호), 아이디 패스워드

- 구현 클래스 : HashMap, TreeMap, Hashtable(표준화전), Properties(표준화전) 등

 

 

ch11-22 Iterator(신버전), ListIterator, Enumeration(구버전)

-컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스

-Enumeration은 Iterator의 구버전

-ListIterator는 Iterator의 접근성을 향상시킨 것 (단방향 -> 양방향)

 

Iterator 멤버 함수

boolean hasNext() : 확인

읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다

Object next()

다음 요소를 읽어 온다 next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지

확인하는 것이 안전하다.

 

Enumeration 멤버 함수

boolean hasMoreElements() : Enumeration버전 hasNext

hasNext와 거의 비슷 

Object nextElement() 

next와 거의 비슷

 

ListIterator는 멤버 함수

previous() 함수가 존재

 

- Iterator의 필요성

List, Set, Map 이 컬렉션들의 구조가 다 다르기 때문에

해당 구조의 컬렉션들을 읽어오는 방법을 표준화할 필요가 있었기 때문에.

 

+ 각 컬렉션들의 구조

List 는 배열처럼 순차적 | | | | | |

Set 은 이중 셋(트리 셋 구조)

Map key-> value 형식

 

=> Iterator

-컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것.

- 컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용

 

List, Set 모두 Collection 인터페이스를 구현한 클래스이고 

그 인터페이스에는 iterator() 메소드가 있음.

 

ex)

List list = new ArrayList();

list.add("1");

list.add("2");

list.add("3");

 

Iterator it = list.iterator();

 

while(it.hasNext()) {

     System.out.println(it.next()); //next() 할때마다 가리키는곳을 넘어감

}

 

그러므로 다시 처음부터 접근하고 싶다면 다시 Iterator를 얻어와야함.

즉, Iterator는 1회용

 

ch11-24 Map과 Iterator

- Map에는 iterator()가 없다. keySet(), entrySet(), values()를 호출해야 함

(Map은 Collection 인터페이스를 구현한 클래스가 아님)

 

EX ) 

Map map = new HashMap();

 

Iterator it = map.entrySet().iterator(); 

 

+엔트리란?

key, value 한 쌍을 엔트리라고함.

 

 

Git : github.com/unool/namgungsung_java.git