Language 10

abstract

사용법클래스에 선언해서 추상 클래스로 만들면 인스턴스를 생성할 수 없게 된다슈퍼 클래스 역할만 하는 경우, 인스턴스를 생성할 수 없도록 클래스에 선언한다생성자를 선언할 수 있으며, 이 생성자는 서브 클래스에서 사용된다메소드에 선언해서 추상 메소드로 만들면 구현을 강제할 수 있다추상 메소드는 추상 클래스와 인터페이스에서 선언 가능추상 클래스(abstract class)와 interface의 차이점추상 클래스(abstract class)Java는 다중 상속을 지원하지 않기 때문에 1개의 클래스만 상속 가능필드(상태)와 생성자를 가질 수 있다추상 메소드(abstract method)상속 받는 클래스에서 구현메소드에 abstract 키워드 추가 필요허용된 접근 제어자: public, protected, pack..

Language/Java 2022.07.17

생성자(Constructor), this(), super()

생성자정의인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드기본 생성자클래스에 반드시 하나 이상의 생성자가 정의되어 있어야 한다생성자를 하나도 선언하지 않으면 Java 컴파일러가 다음과 같이 기본 생성자를 자동으로 추가하여 컴파일한다class 클래스명 { 클래스명() { super(); }}매개변수가 있는 생성자기본 생성자가 아닌 생성자를 선언할 수 있다생성자를 선언하면 컴파일러가 기본 생성자를 자동으로 추가하지 않는다생성자 호출설명서브 클래스는 반드시 슈퍼 클래스의 생성자를 호출해야 한다모든 클래스는 Object 클래스를 상속받는다상속 받는 슈퍼 클래스가 없다면 컴파일러가 자동으로 현재 클래스에 extends Object를 추가하여 컴파일한다super()슈퍼 클래스의 생성자를 ..

Language/Java 2022.07.17

변수, 메소드, this, super

인스턴스 변수(non-static)오버라이딩 하지 않은 경우슈퍼 클래스의 변수를 참조한다this, super 둘 다 동일한 메모리 공간을 참조한다this.name == "Parent"super.name == "Parent"오버라이딩 한 경우변수는 정적 바인딩(Static Binding)을 따른다오버라이딩 되지 않고 숨김(Shadowing)만 발생참조 타입에 따라서 호출 변수가 결정된다슈퍼 클래스의 변수는 슈퍼 클래스의 참조를 통해, 서브 클래스의 변수는 서브 클래스의 참조를 통해서 접근서브 클래스에서 현재 클래스의 변수를 참조하려면 this, 슈퍼 클래스의 변수를 참조하려면 super를 사용한다this.name == "Child"super.name == "Parent"Parent parent = new ..

Language/Java 2022.07.17

오버라이딩(Overriding), 오버로딩(Overloading)

오버라이딩(Overriding)정의슈퍼 클래스의 메소드를 서브 클래스에서 재정의(수정)하여 다형성을 구현하는 기법조건메소드 시그니처가 동일해야 함메소드 이름매개변수(개수, 타입, 순서)반환 타입이 동일해야 함접근 제어자private 메소드는 오버라이딩 불가능범위가 슈퍼 클래스의 메소드보다 넓거나 같아야 함public > protected > package-private예외의 개수가 슈퍼 클래스의 메소드보다 적거나 같아야 함메소드가 static이 아니어야 함메소드가 final이 아니어야 함오버로딩(Overloading)정의같은 클래스 내에서 동일한 이름의 메서드를 매개변수(개수, 타입, 순서)를 다르게 하여 여러 개 정의하는 기법조건메소드 시그니처가 달라야 함메소드 이름매개변수(개수, 타입, 순서)

Language/Java 2022.07.17

초기화 블록(Initialization block)

초기화 블록의 종류클래스 초기화 블록인스턴스 초기화 블록class InitializationBlock { // 클래스 초기화 블록(static) static {} // 인스턴스 초기화 블록(non-static) {}}초기화 시점과 순서class InitializationBlock { static int classVariable = 1; int instantVariable = 101; static { classVariable = 2; } { instantVariable = 102; } InitializationBlock { instantVariable = 103; }}클래스 초기화시점: 클래스가 처음 메모..

Language/Java 2022.07.17

배열(Array)

배열의 생성과 초기화배열은 다음과 같이 초기화할 수 있다// 선언+생성+초기화 동시에int[] scores1 = new int[] {100, 90, 80, 70, 60};// 선언 따로 생성+초기화 따로int[] scores2;scores2 = new int[] {100, 90, 80, 70, 60};배열의 선언과 생성을 동시에 하는 경우 new 생성자[] 생략 가능// 선언+생성+초기화 동시에int[] scores3 = {100, 90, 80, 70, 60};길이가 0인 배열null 대신 길이가 0인 배열을 사용하면 null 체크 등 복잡한 로직을 생략할 수 있기 때문에 유용하게 사용된다배열의 복사배열은 for문이나 System.arraycopy()로 복사할 수 있다for문으로 배열 복사하기int[] ..

Language/Java 2022.07.17

소수점 자르기

기본 원리(함수 사용 X)내림(소수점 4번째 자리)방법1000 곱해서 소수점 3번째 자리까지 정수로 만들기int로 강제 형 변환해서 소수점 제거double형 1000으로 나누기(int보다 더 큰 자료형인 double로 자동 형 변환)코드double decimal = 0.12358;double floored = (int) (decimal * 1000) / 1000.0;연산 순서괄호: (decimal * 1000)단항 연산자: 형 변환 연산자 (int)산술 변환: int와 double의 연산이므로 int가 double로 형 변환(int) (decimal * 1000) → int1000.0 → double이항 연산자: 사칙 연산자 (/)double형 끼리의 연산이므로 결과도 double결과0.12358 → 0..

Language/Java 2022.06.14

문자형(char)

문자 인코딩(Character encoding, Text encoding)인코딩은 문자를 고유한 숫자로 매핑한 규약일 뿐이며, 특정 진법에 종속되지 않는다ASCII(American Standard Code for Information Interchange)일반적으로 10진수 표기Unicode일반적으로 16진수 표기문자ASCIIUnicode0~948~57U+0030 ~ U+0039A~Z65~90U+0041 ~ U+005Aa~z97~122U+0061 ~ U+007A참고https://www.ascii-code.com/https://en.wikipedia.org/wiki/List_of_Unicode_characters문자 ↔︎ 숫자 변환// 문자형 '3'을 숫자 3으로 변환char three = '3';int ..

Language/Java 2022.06.13

형 변환(Type Casting)

업캐스팅(Upcasting)기본 자료형더 큰 자료형으로 변환Floating Point 자료형(float, double)은 Fixed Point 자료형(byte, short, char, int, long)보다 훨씬 더 넓은 범위를 표현할 수 있지만, 정확도를 보장하는 범위를 넘어서면 오차가 발생한다데이터 손실 없는 경우byte → 더 큰 자료형(short, int, long, float, double)short → 더 큰 자료형(int, long, float, double)char → 더 큰 자료형(int, long, float, double)int → long, double데이터 손실 있는 경우int, long → float: ±16,777,216(=2²⁴) 이후 오차 발생float의 가수부는 23비트지..

Language/Java 2022.06.12