맵
- Key-Value 대응 관계에 있는 데이터들의 모임
put(key, value)
: 데이터 추가get(key)
: key에 해당하는 value 값을 반환getOrDefault(key, default_value)
:key에 해당하는 값을 가져오되, 만약 값이 존재하지 않을 경우 default_key 를 반환containsKey(key)
: 해당 맵의 key 여부 확인 가능remove(key)
: 해당 맵에서 key 에 해당하는 아이템을 삭제한 후 value 값을 반환size()
: 해당 맵의 아이템 개수를 반환keySet()
: 해당 맵의 key 를 모아서 반환
예외처리
1
2
3
4
5
6
7
8
9
try {
// code
} catch(exception1) {
// code
} catch(exception2) {
// code
} finally {
// code
}
- 프로그램을 작성하다보면, 예상하지 못한 다양한 오류가 발생할 수 있음
- 예외처리를 통해 오류가 발생할 경우 해당 오류에 적합한 액션을 취할 수 있도록 함
- try 내부에서 오류 발생 유무에 따라 catch 문 내부의 코드를 실행
- finally 문을 통해 오류의 발생 유무에 상관없이 항상 실행되는 코드 작성가능
객체 지향
- 객체(Object) : 자료(특성)와 이를 대상으로 처리하는 연산(메서드)을 하나로 묶어 만든 요소. 프로그램을 구성하는 실체.
- 객체 지향 프로그래밍에서 프로그램은 여러 개의 객체로 구성
- 장점
- 신뢰성있는 소프트웨어를 쉽게 작성 가능
- 코드 재사용 용이함
- 업그레이드 & 디버깅이 쉬움
- 특징
- 추상화 : 객체에서 공통된 속성과 행위를 추출하여 타입을 정의하는 과정
- 캡슐화 : 관련된 데이터와 코드가 하나의 묶음으로 정리되어 있음으로 객체의 실제 구현 내용을 감춰 객체의 내부를 보호
- 상속 : 부모 클래스를 이어받아, 자식 클래스를 생성
- 다형성 : 하나의 변수명, 메서드명이 상황에 따라 다른 의미로 해석될 수 있는 것
객체 지향 설계 원칙(SOLID)
- 단일 책임원칙 (Single Responsibility Principle)
- 하나의 클래스는 하나의 책임만을 가져야 함
- 개방-폐쇄 원칙 (Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 함
- 기능을 변경하거나 확장할 수 있으면서 코드는 수정하지 않음
- 리스코프 치환 원칙 (Liskov Substitution Principle)
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 프로그램은 정상 작동해야 함
- 인터페이스 분리 원칙 (Interface Segregation Principle)
- 하나의 인터페이스 보다 여러 개의 인터페이스로 분리하는 것이 좋음
- 인터페이스는 사용자(클라이언트)를 기준으로 분리
- 의존관계 역전 원칙 (Dependency Inversion Principle)
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안됨
- 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 함
클래스 상속
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal { // Animal 클래스 상속받음
void sleep() {
System.out.println(this.name + " zzz...");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name); // poppy
dog.sleep(); // poppy zzz...
}
}
메서드 오버로딩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal { // Animal 클래스 상속받음
void sleep() {
System.out.println(this.name + " zzz...");
}
void sleep(int hour) {
System.out.println(this.name + " zzz for " + hour);
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
dog.sleep(); // poppy zzz...
dog.sleep(4); // poppy zzz for 4
}
}
접근 제어자
- private
- 선언된 해당 클래스 내에서만 접근 가능
- default
- 패키지 내에서만 접근 가능
- 접근 제어자를 별도로 설정하지 않으면 자동으로 default로 설정
- protected
- 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근 가능
- public
- 어떤 클래스든 접근 가능
Comments powered by Disqus.