❗️ Information
어제 있던 중간고사 시험을 위해 [Java의 정석 - 기초편]을 읽은 후, 필요한 내용에 대해서만 정리했습니다.
따라서 각 개념들에 대해 내용이 다소 빈약할 수 있다는 점 양해해주세요. 🙇♀️
class Tv {
string color;
boolean power;
int channel;
void power(boolean pow) {
power = pow;
}
// 또는
void power(boolean power) {
this.power = power;
}
void channelUp() {
++channel;
}
}
class TvTest {
public static void main(String arg[]) {
Tv t = new Tv();
t.channel = 6;
t.channelUp();
System.out.println(t); // t = 7;
}
}
class CaptionTv extends Tv {
boolean caption;
void displayCation (String text) {
if(caption) {
System.out.println(text);
}
}
}
멤버
만 상속된다.children --> parent
단일 상속
만 허용1. 포함관계
has-a
: ~은 ~을 가지고 있다.
class Point {
int x;
int y;
}
class Circle {
Point c = new Point();
int r;
}
2. 상속관계
is-a
: ~은 ~이다.
class Circle extends Point {
int r;
}
❗️ 오버라이딩하는 자손 클래스는 부모 클래스보다 접근 범위가 적으면 안된다.
- 부모 : protected / 자식 : protected, public 👉 가능
- 부모 : public / 자식 : protected 👉 불가능
super : 자손클래스에서 조상클래스에게 상속받은 멤버를 참조하는 데 사용되는 참조 변수
super() : 조상 클래스의 생성자를 호출하는데 사용
❗️ 생성자와 초기화 블록은 상속되지 않는다. 즉멤버
만 상속된다.
super()
임 !!!!생성자.this()
또는 super()
을 호출해야 한다.class PointTest {
public static void main(String args[]) {
Point3D p3 = new Point3D(1, 2, 3);
}
}
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
String getLocation() {
return "x : x + y";
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
super(x, y); // extends 받은 조상 클래스 멤버의 초기화 작업 수행
this.z = z;
}
}
use: 클래스, 멤버변수, 메서드, 생성자
캡슐화(은닉)을 위해 사용
abstract
추상 클래스 & 추상 메서드 / 인터페이스implements
를 사용한다.// 문법
class 클래스이름 implement 인터페이스이름 {
// 인터페이스에서 정의된 추상메서드 구현
}
// 예제
class Fighter implement Fightable {
public void move(int x, int y) {
...
}
public void attack(Unit u) {
...
}
}
만약 구현하는 인터페이스의 메서드 중 일부만 구현한다면, abstract
을 붙여 추상 클래스로 선언해야 한다.
abstract class Fighter implement Fightable {
public void move(int x, int y) {
...
}
}
에러 : 수습될 수 없는 심각한 오류
예외 : 수습될 수 있는 미약한 오류
throw
를 사용해 고의로 예외를 발생시킬 수 있음// 1. new 연산자를 통해 예외 클래스의 객체를 만든다.
Exception e = new Exception('error');
// 2. throw 키워드로 예외 발생시킴
throw e;
throws
를 사용해 메서드 내 발생할 수 있는 예외 처리void method() throws Exception1, Exception2... {
...
}
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().filter(x => x % 2 == 0);
ArrayList list = new ArrayList();
Map<String, Integer> map = Map.of("A", 3, "B", 5, "C", 10);
Syncronized
👈 동기화 메서드를 사용해 동기화 작업을 처리한다.List syncList = Collections.syncronizedList(new ArrayList(..));
// 원래 코드
class Box {
Object item;
void setItem(Oject item) {
this.item = item;
}
Object getItem() {
return item;
}
}
// 타입 변수로 바꿔줌
class Box<T> { // T : 타입 변수
T item;
void setItem(T item) {
this.item = item;
}
T getItem() {
return item;
}
}
타입 변수 : 임의의 참조형 타입을 의미
이후 제네릭 클래스가 된 Box 클래스의 객체 생성 시 👉 실제 타입을 지정
// 제네릭의 실제 타입 지정해줌
Box<String> b = new Box<String>(); // 타입 T대신 실제 타입 지정
b.setItem('abc'); // ok
ArrayList<T> list = new ArrayList<T>();
T
👉 String
타입으로 지정된 것과 같음.Box<T>
: 제네릭 클래스T
: 타입 변수 / 타입 매개 변수Box
: 원시 타입(raw type)String
: 매개변수화된 타입private
로 지정됨// 기본 문법
enum 열거형이름 {상수1, 상수2, 상수3, ...}
// 예제
class Card {
enum Kind { CLOVER, HEART, DIAMOND }
enum value { TWO, THREE, FOUR }
final Kind kind;
final Value value;
}
애너테이션은 주석처럼 코드에 영향을 미치지 않으면서 프로그램에게 유용한 정보를 제공할 수 있다.
자바는 기본적으로 제공하는 애너테이션이 몇게 없다.
그 중 일부는메타 애너테이션
으로 애너테이션을 정의하는데 사용되는 애너테이션이다.
Annotation | 설명 | |
---|---|---|
@Override | 컴파일러에게 오버라이딩하는 메서드라는 것을 알림 | |
@Deprecated | 앞으로 사용하지 않을 것을 권장하는 대상에 붙임 | |
@FunctionalInterface | 함수형 인터페이스라는 것을 알림 |