Search

자바의 정석 Chapter 1~5

특징
객체지향 언어
자동 메모리 관리 (가비지 컬렉터)
멀티스레드 지원
풍부한 라이브러리
운영체제 독립적(jvm)
javaAPI
주요한 기능과 상세정보를 미리 만들어 HTML파일로 oracle에서 제공
java 사전 같은 느낌
javac
자바의 컴파일러
소스파일 .java를 클래스 파일.class로 바꿔줌
java
자바 인터프리터
클래스파일을 실행한다
클래스
자바 프로그램의 단위로 최소 하나 이상이어야 한다
단위는 {} 중괄호
main 메서드
프로그램의 시작점
빌드
소스파일 .java로부터 프로그램을 만들어 내는 전 과정
Project → Build All : workspace의 모든 프로젝트를 빌드
Project → Build Project : 현재 프로젝트를 빌드 (변경된 소스 파일만 새로 컴파일)
Project → Clean : 이전 빌드의 정보를 모두 삭제 (모든 소스와 파일을 새로 컴파일)
Project → Build Automatically : 소스 파일을 변경 후 저장할 때마다 자동 컴파일
단축키
Command + Shift + L : 단축키 전체 목록 표시
Command + +/- : 폰트 크기 증가/감소
Command + D : 한 줄 삭제
Command + Option + up/down : 위쪽/아래쪽에 해당 줄 복사
Option + up/down : 위쪽/아래쪽으로 해당 줄 변경
Command + / : 주석
Command + Option + A : 토글 (멀티 컬럼 편집)
Command + Shift + M : import 자동 추가
변수, 상수, 리터럴
클래스 변수, 인스턴스 변수, 지역 변수
지역 변수는 읽기 전에 꼭 초기화해야 함!!!!
변수(variable) : 하나의 값을 저장, 변경O
상수(constant) : 한 번만 값을 저장, 변경X
ex) final int a = 100;
리터럴(literal) : 그 자체로 값을 의미
int a = 100; 에서 100
기본형 변수
문자 char
정수 byte(-128~127), short, int, long
실수 float, double
논리 boolean
실제 값을 저장
참조형 변수
기본형을 제외한 나머지 (String, System 등)
메모리 주소를 저장(4byte or 8byte)
접두사, 접미사
long 타입은 20억이 넘는 숫자 뒤에 L (생략X)
float 타입은 숫자 뒤에 f (생략X)
double 타입은 숫자 뒤에 d (생략O)
범위가 변수 > 리터럴이면 OK
숫자 앞에 0b가 붙으면 2진수
숫자 앞에 0이 붙으면 8진수
숫자 앞에 0x가 붙으면 16진수
printf
%#o, %#x 는 8진수, 16진수에 접두사 붙여 출력
println
참조변수만 입력되면 .toString()을 붙여준다
scanner
화면으로부터 데이터를 입력 받는 기능을 제공하는 클래스
import java.util.*; 로 추가
Scanner scanner = new Scanner (System.in); 로 객체생성
int num = scanner.nextInt(); 로 num에 저장
String input = scanner.nextLine(); 로 다음 행 받아서 저장
Integer.parseInt(String);
문자열을 숫자로 변환
오버플로우
표현 가능한 범위를 넘는 것
최대값 + 1 / 최소값 -1 ⇒ 오버플로우
최대값 + 1 ⇒ 최소값
최소값 - 1 ⇒ 최대값
부호 있는 정수, 부호 없는 정수 구별 주의!!!!
정수 범위 (n은 비트)
부호 없는 정수 : 0 ~ 진수^n-1개
부호 있는 정수 : (-진수^n-1) ~ (진수^n-1) - 1
타입 간의 변환 방법
문자 → 숫자 : Integer.parseInt(”3”) ⇒ 3
숫자 → 문자 : 3 + “” ⇒ “3”
문자 → char : “3”.charAt(0) ⇒ ‘3’
char → 숫자 : ‘3’ - ‘0’ ⇒ 3
문자 + 문자 : “3” + “1” ⇒ “31”
숫자 + char : 3 + ‘0’ ⇒ 51 (아스키코드)
연산자 종류
연산자 우선순위
대입, 단항 연산자를 제외한 모든 연산자의 방향은 왼쪽→오른쪽
형변환
값손실이 나는 경우는 형변환을 해줘야 한다! (해줘도 값손실나지만 에러는 없음)
연산을 할 때는 피연산자들의 타입을 일치시켜야 한다!
작은걸 큰걸로 자동 형변환 시켜주기도 한다
Math.round()
Math.round(3.141592 * 1000) / 1000 ⇒ 3.1416
equals()
str1.equals(str2) (대소문자 구분O)
str1.equalsIgnoreCase(str2) (대소문자 구분X)
문자열 비교는 == 대신 equals()를 사용해야 한다!
왜?
조건 연산자
result = 조건식 ? True : False;
switch문
조건식 결과는 정수 또는 문자열(1.7버전)이어야 한다
case문의 값은 정수 상수(문자 포함), 문자열만 가능, 중복X, 변수X
Math.random()
0.0 ≤ x < 1.0
0.0 ≤ x * 10 < 10.0
0 ≤ (int) x * 10 < 10 ⇒ 1~9
1 ≤ (int) x * 11 < 11 ⇒ 1~10
-5 ≤ (int) (x * 11) - 5 < 6 ⇒ -5~5
배열
int[] score = new int[5];
int[] score = {50, 60, 70, 80, 90};
new int[] 는 99% 생략할 수 있지만 1% 에러일 때도 있다!!!
배열이름.length : 배열의 길이 (int형 상수)
배열은 한 번 생성하면 길이를 바꿀 수 없다!!!
(선언할 때 연속적인 메모리 공간을 할당하기 때문!)
iArr(int배열)은 I@14318bb와 같은 주소값이 출력!
(문자열로 출력하기 위해선 Arrays.toString(iArr) 사용
chArr(char배열)은 abcd가 정상적으로 출력!
String 배열
String[] name = new String[] {”Kim”, “Park”, “Yi”};
String[] name = {”Kim”, “Park”, “Yi”};
2차원 배열
int[][] score = new int[행][열];
int[][] arr = new int[][] { {1, 2, 3}, {4, 5, 6} };
int[][] arr = { {1, 2, 3}, {4 ,5 ,6} };
int[][] arr = {
{1, 2, 3},
{4, 5, 6}
};
String 클래스
String str = “ABCDE”;
String 클래스는 char[]와 메서드(기능)를 결합한 것
(String 클래스 = char[] + 메서드(기능)
String 클래스는 내용을 변경할 수 없다(Read only)
ex) “a” + “b” ⇒ “ab”라는 값이 새로운 메모리에 입력
주요 메서드
Arrays 클래스
1차원 출력 : Arrays.toString(arr)
2차원 출력 : deepToString(arr2D)
1차원 비교 : equals(str2D, str2D2)
2차원 비교 : deepEquals(str2D, str2D2)
배열 복사 : Arrays.copyOf(arr, arr.length)
Arrays.copyOfRange(arr, from, to)
(빈 자리는 0)
배열 정렬(오름차순) : Arrays.sort(arr)
C 와 JAVA의 차이
char 변수는 C 1byte, JAVA 2byte
print에서 문자 + 변수
C에서는 서식문자 %이용
JAVA에서는 “문자" + 변수명 + “문자”
개행문자 \n 은 OS마다 다를 수 있으므로 %n으로 쓴다