1장 기본 프로그래밍 구조

Jasik·2021년 12월 6일
0

1장 기본 프로그래밍 구조

첫 번째 프로그램

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

자바: 객체 지향 언어
자바에서는 모든 코드를 클래스 안에 정의

패키지: 관련된 클래스를 모아놓는 집합

자바는 몇 가지 명령을 빠르게 실행하는 데 사용하는 스크립팅 언어가 아니다. 자바는 클래스와 패키지로 구조화했을 때 이점을 얻는 대규모 프로그램 개발용 언어를 목표로 만들어졌다.

자바 프로그램을 컴파일하고 실행하려면 JDK(Java Development Kit)를 설치해야 한다.

자바 프로그램의 실행 - javac 명령으로 자바 소스코드를 중간 표현인 바이트 코드로 컴파일해서 클래스 파일에 저장. java 명령으로 가상 머신을 구동하고 클래스 파일을 로딩해서 바이트 코드를 실행.

바이트 코드: 한 번 컴파일하면 어느 자바 가상 머신에서도 실행 가능.

자바의 중요한 설계 기준: write once, run anywhere

인스턴스 메서드 호출 방법
객체.메서드명(인자목록)

ex)
"Hello World!".length()

객체의 생성
ex)
new Random()

기본 타입 (Primitive type)

정수 타입
int (4 byte), long (8 byte), short (2 byte), byte (1 byte)

long 타입 정수 리터럴: 접미어 L을 붙여서 작성
ex) 4000000000L

byte, short 타입 리터럴을 작성하는 문법은 없음. (byte) 127 처럼 타입 변환(cast) 표기법을 사용

16진수: 접두어 0x (0xCAFE)
2진수: 접두어 0b (0x1001)

숫자 리터럴에 _ 사용 가능.
ex) 1_000_000

8진수 접두어 0 (011 : 9)
혼동 줄 수 있으므로 사용 지양

부동 소수점 타입
float (4 byte), double (8 byte)

float 타입 숫자 접미어 F (3.14F)
double 타입 숫자 접미어 F 붙이지 않음 (3.14)

Double.POSITIVE_INFINITY : 무한대
Double.NEGATIVE_INFINITY : 음의 무한대
Double.NaN : Not a number

1.0/0.0 : 양의 무한대
0.0/0.0, 음수의 루트 : NaN

부동소수점은 반올림 오류가 발생
ex) 2.0-1.1 : 0.8999999..
반올림 오류가 없는 정확한 숫자 계산을 위해 BigDecimal 클래스 사용

char 타입
자바가 사용하는 UTF-16 문자 인코딩의 '코드 유닛(코드 단위)'를 나타냄

코드 유닛 접두어 \u 를 사용하여 16진수로 표현 가능.
ex) '\u004A' = 'J'

escape : \

boolean 타입
false, true

변수

변수 선언
ex)
int total = 0;
Random generator = new Random();

변수 이름
글자, 숫자, 기호, _, $ 로 구성 가능

변수는 반드시 초기화 후 사용 가능

상수
final 키워드: 한 번 할당하면 변경할 수 없는 값에 사용.

final 키워드는 사용 전 딱 한번만 초기화.

ex)
public static final int DAYS_PER_WEEK = 7;

final 변수의 초기화 미룰 수 있음
ex)

final int DAYS_IN_FABRUARY;
if (isLealYear) {
    DAYS_IN_FABRUARY = 29;
} else {
    DAYS_IN_FABRUARY = 28;
}

산술 연산

관계 연산자와 논리 연산자
boolean 타입 표현식은 &&, ||, ! 연산자와 결합 가능

단락 평가(short circuit evaluation): 첫번째 조건이 false이면 두 번째 조건은 평가하지 않는다. 두 번째 조건이 오류를 일으킬 가능성이 있으면 유용.
ex)
n != 0 && s + (100 - s) / n < 50

큰 숫자
BigInteger, BigDecimal
BigInteger n = BigInteger.valueOf(876543210123456789L);

BigInteger r = BigInteger.valueOf(5).multiply(n.add(k)); // r = 5 * (n + k)

문자열

문자열 비교
두 문자열이 같은지 비교는 equals 메서드를 사용.
ex) "World".equals(location)

문자열 비교시 == 사용 하지 않음
== 비교는 location과 "World"가 메모리에서 같은 객체일 때만 true를 반환.

코드 포인트와 코드 유닛
UTF-16: 길이가 가변적이고 하위 호환성을 지원하는 인코딩.
모든 전통적인 유니코드 문자를 16비트 값 한 개로 나타냄.
U+FFFF를 넘는 문자는 16비트 값의 쌍으로 나타냄.

서식 지정 출력
Syetem.out.printf()
로 출력

String.format()
로 서식 지정된 문자열 리턴

제어 흐름

지역 변수의 유효 범위
지역 변수: 메서드의 파라미터를 포함해 메서드 안에 선언한 변수
지역 변수의 유효범위는 변수 선언 지점에서 시작, 해당 선언을 감싸고 있는 블록의 끝까지

파라미터 변수의 유효 범위는 메서드 전체

배열과 배열 리스트

배열 생성
String[] names = new String[100];

new 연산자로 배열을 생성하면 기본값으로 채워짐.
숫자 타입: 0
boolean: false
객체: null

int primes = {2, 3, 5, 7, 11, 13};
처럼 생성도 가능

배열 리스트(ArrayList 클래스): 컬렉션 프레임워크 중 하나
내부에서 배열을 관리. 배열이 너무 작아지거나 배열의 공간이 많이 남으면 다른 내부 배열을 생성해서 원본 배열의 요소를 옮김.

ArrayList<String> friends = new ArrayList<>();
(다이아몬드 문법: 컴파일러가 변수의 타입으로부터 타입 파라미터를 추론)

기본 타입의 래퍼 클래스
Integer, Byte, Short, Long, Character, Float, Double, Boolean

ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(42); // autoboxing
int first = numbers.get(0); //unboxing

기본 타입과 대응하는 래퍼 타입 사이의 변환은 자동으로 일어남.
(autoboxing, unboxing)

명령줄 인자
main 메서드는 문자열 배열을 파라미터로 받는다.

public static void main(String[] args)

java greeting -g cruel world
처럼 프로그램을 실행시키면
args = {'-g', 'cruel', 'world'}
가 된다.

함수 분해

가변 인자
메서드 호출자(caller)가 인자 개수를 정하지 않고 사용할 수 있는 메서드

public static double average(double... values)

와 같이 파라미터를 선언하면 values는 double[] 이 된다.

double avg = average(3, 4.5, 10, 0);

double[] scores = {3, 4.5, 10, 0};
double avg = average(scores);

처럼 사용 가능.

profile
가자~

0개의 댓글