
아직 부족한게 많다는 걸 느낀 하루였다. 😢
3일차는 노션 보니까 적은게 거의 없어서 pass...ㅎㅎ
캡슐화
- 정보은닉을 통해 데이터와 메서드를 묶어서 보호
- 접근 제어자를 통해 캡슐화
- 코드가 변경 되도 안정적으로 사용할 수 있음
상속
- 코드 재사용 가능 → 코드를 부모 클래스에서 상속받은 뒤 기능을 추가할 수 있음
- 기존의 메서드를 수정할 수도 있음(오버라이딩)
다형성
- 하나의 객체나 메서드가 여러 형태로 동작할 수 있음
- 객체지향 원칙 중 가장 중요
추상화
- 중요한 기능만 보여주고 복잡한 동작은 감춘다.
→ 추상화와 캡슐화는 어떤 것을 감추는지에 따라 구분됨
객체지향은 이 4가지의 특징을 통해 유연성을 높일 수 있다.
데이터와 메서드를 묶어놓은 실체로서, 객체는 개념이고 클래스는 그 개념을 사용할 수 있도록 하는 틀, 인스턴스는 틀을 통해 만들어놓은 결과물이다.
객체는 상태와 행동으로 구성
- 상태 → 데이터가 가지는 속성
- 행동 → 객체가 행할 수 있는 동작
객체 지향 설계의 기본 단위이다. 클래스는 객체의 상태를 나타내는 변수와 행동을 나타내는 메서드로 구성
클래스를 바탕으로 생성된 구체적인 객체
→ new 키워드를 통해 클래스 기반으로 생성
생성자 (클래스의 이름과 동일)
- 클래스를 통해 인스턴스를 만들 수 있는 특수한 함수
- 반환타입이 없음
- 오버로딩 가능 → 여러개의 생성자를 정의할 수 있음
| 기본 생성자 | 사용자 정의 생성자 |
|---|
| - 컴파일러(javac)에 의해 자동으로 정의
변수와 메서드의 접근 가능 범위를 정의
static
클래스 수준에서 멤버를 정의할 때 사용
public static int staticField = 10;
private int intValue = 20;
public class AClass {
private int instanceVar; // 인스턴스 변수
private static int staticVar; // 정적 변수
public void instanceMethod() {
// 인스턴스 변수와 정적 변수 모두 접근 가능
instanceVar = 10;
staticVar = 20;
}
public static void staticMethod() {
// 정적 변수만 접근 가능
staticVar = 30;
// instanceVar는 접근 불가능
}
}
(java는 명시적으로 단일 상속만 지원) → 상속 구조를 명확하고 단순하게 하기 위해
자바에서의 상속 방법
class 클래스 이름 extends 부모 클래스 {}
override
상속받은 행동을 스스로 확장하거나 새롭게 동작하게 메소드를 재정의 하는 기능 → 다형성 구현
super
자식 클래스가 부모 클래스의 기능을 참조하거나 호출할때 사용
//부모 클래스
class Dog {
private String name;
public Dog(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(food + "를 먹습니다.");
}
public void sleep(int hour) {
System.out.println(hour + "시간 만큼 낮잠을 잡니다.");
}
public void bark(int times) {
for (int i = 0; i < times; i++) {
System.out.println("멍!");
}
}
}
//자식 클래스
class Husky extends Dog {
public Husky(String name) {
super(name);
}
}
추상 클래스는 직접적으로 인스턴스화 될 수 없음
공부해야 될 점 🧐
- 문제를 받았을 때 상태와 행동을 어떻게 구분해야 하는지, 그리고 어떻게 클래스를 구분해야 되는지 바로 떠오르지 않음 → 더 많은 유형의 문제를 풀어볼 필요가 있음
| 문제1 |
|---|
| 설명 - 스마트폰을 생성하고 다양한 앱을 설치하여 실행할 수 있도록 합니다.
조건
1. Smartphone 클래스를 생성하세요.
2. App 클래스를 생성하고, 앱의 이름을 설정할 수 있도록 합니다.
3. 스마트폰에는 한 번에 한 개의 앱만 실행될 수 있습니다.
4. 새로운 앱을 실행하면 기존 앱은 자동으로 종료됩니다.
5. 스마트폰의 전원이 켜져 있어야만 앱을 실행하거나 종료할 수 있습니다.
6. 전원이 꺼진 상태에서는 앱을 실행할 수 없습니다.
7. 이미 전원이 켜져 있거나 꺼져 있는데 중복 조작은 불가능합니다. |
public class
| 문제2 |
|---|
| 설명
뮤직 플레이어를 생성하고 노래를 재생할 수 있도록 합니다.
조건
1. MusicPlayer 클래스를 생성하세요.
2. Song 클래스를 생성하고, 노래의 제목과 가수를 설정할 수 있도록 합니다.
3. 뮤직 플레이어에는 한 번에 한 개의 노래만 재생할 수 있습니다.
4. 새로운 노래를 재생하면 기존 노래는 자동으로 정지됩니다.
5. 뮤직 플레이어의 전원이 켜져 있어야만 노래를 재생할 수 있습니다.
6. 전원이 꺼진 상태에서는 노래를 재생할 수 없습니다.
7. 이미 전원이 켜져 있거나 꺼져 있는데 중복 조작은 불가능합니다. |