데브코스 4일차 TIL

Heesu Song·2025년 3월 18일

데브코스 - 백엔드

목록 보기
2/32
post-thumbnail

아직 부족한게 많다는 걸 느낀 하루였다. 😢
3일차는 노션 보니까 적은게 거의 없어서 pass...ㅎㅎ

JAVA - OOP

Object Oriented Paradigm

캡슐화

  • 정보은닉을 통해 데이터와 메서드를 묶어서 보호
  • 접근 제어자를 통해 캡슐화
  • 코드가 변경 되도 안정적으로 사용할 수 있음

상속

  • 코드 재사용 가능 → 코드를 부모 클래스에서 상속받은 뒤 기능을 추가할 수 있음
  • 기존의 메서드를 수정할 수도 있음(오버라이딩)

다형성

  • 하나의 객체나 메서드가 여러 형태로 동작할 수 있음
  • 객체지향 원칙 중 가장 중요

추상화

  • 중요한 기능만 보여주고 복잡한 동작은 감춘다.

→ 추상화와 캡슐화는 어떤 것을 감추는지에 따라 구분됨

객체지향은 이 4가지의 특징을 통해 유연성을 높일 수 있다.

객체

데이터와 메서드를 묶어놓은 실체로서, 객체는 개념이고 클래스는 그 개념을 사용할 수 있도록 하는 틀, 인스턴스는 틀을 통해 만들어놓은 결과물이다.

객체는 상태행동으로 구성

  • 상태 → 데이터가 가지는 속성
  • 행동 → 객체가 행할 수 있는 동작

Class

객체 지향 설계의 기본 단위이다. 클래스는 객체의 상태를 나타내는 변수와 행동을 나타내는 메서드로 구성

인스턴스

클래스를 바탕으로 생성된 구체적인 객체

new 키워드를 통해 클래스 기반으로 생성

생성자 (클래스의 이름과 동일)

  • 클래스를 통해 인스턴스를 만들 수 있는 특수한 함수
  • 반환타입이 없음
  • 오버로딩 가능 → 여러개의 생성자를 정의할 수 있음
기본 생성자사용자 정의 생성자

| - 컴파일러(javac)에 의해 자동으로 정의

  • 사용자 정의 생성자가 하나라도 있으면 기본 생성자는 자동으로 생성되지 않음 | 외부에서 받아온 매개변수의 값을 내부 클래스에서 선언된 변수에 할당하려면 구분이 필요 → this(나 자신) |

스코프(Scope)

변수와 메서드의 접근 가능 범위를 정의

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);
    }
}
  • 이 경우 Dog를 상속받은 자식 클래스는 생성자를 호출해야함
  • 명시적으로 super를 호출해줘야함 → 매개변수를 넣어주면 부모클래스에서 인스턴스 생성
  • 매개변수가 없는 경우면 자동으로 super() 생성

추상 클래스

추상 클래스는 직접적으로 인스턴스화 될 수 없음

  • 추상 메서드
    • 구현 되지 않은 메서드 (메서드 body가 없음)
    • 선언, 정의만 포함
    • 자식 클래스에서는 반드시 구현 되어야 함
  • 구현 메서드 →
  • 인스턴스 생성 불자 →

실습 내용

  • 클래스 안에는 명령문이 직접 올 수 없음 -> 함 수 안에 선언 가능
  • 캡슐화 → private로 선언후 getter, setter로 접근

공부해야 될 점 🧐

  • 문제를 받았을 때 상태와 행동을 어떻게 구분해야 하는지, 그리고 어떻게 클래스를 구분해야 되는지 바로 떠오르지 않음 → 더 많은 유형의 문제를 풀어볼 필요가 있음
문제1

| 설명 - 스마트폰을 생성하고 다양한 앱을 설치하여 실행할 수 있도록 합니다.

조건
1. Smartphone 클래스를 생성하세요.
2. App 클래스를 생성하고, 앱의 이름을 설정할 수 있도록 합니다.
3. 스마트폰에는 한 번에 한 개의 앱만 실행될 수 있습니다.
4. 새로운 앱을 실행하면 기존 앱은 자동으로 종료됩니다.
5. 스마트폰의 전원이 켜져 있어야만 앱을 실행하거나 종료할 수 있습니다.
6. 전원이 꺼진 상태에서는 앱을 실행할 수 없습니다.
7. 이미 전원이 켜져 있거나 꺼져 있는데 중복 조작은 불가능합니다. |

public class 
문제2

| 설명
뮤직 플레이어를 생성하고 노래를 재생할 수 있도록 합니다.
조건
1. MusicPlayer 클래스를 생성하세요.
2. Song 클래스를 생성하고, 노래의 제목과 가수를 설정할 수 있도록 합니다.
3. 뮤직 플레이어에는 한 번에 한 개의 노래만 재생할 수 있습니다.
4. 새로운 노래를 재생하면 기존 노래는 자동으로 정지됩니다.
5. 뮤직 플레이어의 전원이 켜져 있어야만 노래를 재생할 수 있습니다.
6. 전원이 꺼진 상태에서는 노래를 재생할 수 없습니다.
7. 이미 전원이 켜져 있거나 꺼져 있는데 중복 조작은 불가능합니다. |

profile
Abong_log

0개의 댓글