Today I Learned

2024 스파르타 내일배움캠프 Sping 트랙 참여 // day18

shinelee26 2024. 10. 25. 21:35

오늘 진행한 학습 요약

1. 나무반 4회차 

  • 코드 디버깅 방법 (intellij)
  • 코드 리팩토링

2. 추상클래스 개념 공부

  • 추상클래스의 작성
자바의 정석 - 추상클래스의 작성1 : https://youtu.be/SBdXXWIB3To?si=rdT0y6jtACXVNzmQ
자바의 정석 - 추상클래스의 작성2 : https://youtu.be/s0gRBHqa0yg?si=cWo3YOfWVR1Gyj-j

 

3. 향상된 for문 정리

  • 향상된 for문이란?
  • 일반 for문과 향상된 for문의 차이
활코딩 - for-each : https://youtu.be/EcLZUcCLRxg?si=x25HtdkcfJ2ohOIM

 

4. 알고리즘 코드카다  Day10 (작성 생략)

CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest

 

5. Git-hub profile 업데이트 (작성 생략)

Git-hub 링크 : https://github.com/chews26

학습 정리

1. 나무반 4회차 

  • 코드 디버깅 방법 (intellij)
    • 디버그모드(Shift +F9) 로 항상 실행할 것! 
    • 중단점(브레이크 포인트)은 코드가 실행되는 부분에 하나만 찍어도됨.
    • 이상이 없으면 넘길 부분뒤에 중단점을 찍고 프로그램재개(F8)실행
    • Step In (F7): 메서드 호출 내부로 들어가 세부사항을 확인 
    • Step Over (F8): 메서드를 실행만 하고 내부로 들어가지 않음
    • Step Out (Shift + F8): 현재 메서드를 빠져나옴
    • 값 수정: Variables 창에서 변수 값을 더블 클릭하면 수정이 가능
    • 예외 발생 시 디버그: 특정 예외가 발생할 때 자동으로 디버그가 멈추도록 설정
  • 코드 리팩토링
    • 예시로 설명해주셔서 따로 정리 
    • 함수 추출(Extract Method): 여러 곳에서 반복되는 코드나 긴 메서드를 더 작은 함수로 분리하여 코드 중복을 줄이고 가독성을 높입니다.
    • 변수명 개선(Rename Variable): 직관적이지 않은 변수명을 의미 있는 이름으로 바꿔 가독성을 높입니다. 예를 들어, a 대신 totalCount 같은 구체적인 이름을 사용합니다.
    • 매직 넘버 제거(Remove Magic Numbers): 코드 내의 상수값을 의미 있는 변수로 치환하여 코드의 의미를 명확하게 만듭니다. 예를 들어, 3.14159를 PI로 정의하여 사용합니다.
    • 조건문 단순화(Simplify Conditionals): 복잡한 조건문을 단순하게 표현하거나, 메서드로 분리하여 코드 흐름을 명확하게 만듭니다. 삼항 연산자나 switch 구문을 적절히 사용해 가독성을 높일 수 있습니다.
    • 클래스 분리(Split Class): 하나의 클래스에 너무 많은 역할이 모여 있을 경우, 이를 여러 클래스로 분리해 책임을 명확히 합니다.
    • 인터페이스 도입(Introduce Interface): 공통된 기능을 수행하는 클래스들에 대해 인터페이스를 도입하여 유연성을 높이고 의존성을 줄입니다.
    • 반복문 단순화: 복잡한 반복문을 단순화하거나 스트림(stream)을 사용하는 등, 더 읽기 쉬운 방식으로 변경합니다.

2. 추상클래스 개념 공부

  • 추상클래스의 작성
    • 공부를 해도 헷갈려서 다시 한번 더 공부
    • 추상화의 장점 : 구체화된 코드보다 유연, 변경에 유리
    • 애매하게 쓰니 유연하고 변경에 유리하다.
abstract class Race { // 종족이라는 추상 클래스
    abstract void attack(); // 공격은 종족마다 다르게 구현
    abstract void move();   // 이동도 종족마다 다르게 구현
}
class Terran extends Race {
    @Override
    void attack() {
        System.out.println("테란: 총을 쏜다!");
    }

    @Override
    void move() {
        System.out.println("테란: 걸어서 이동한다.");
    }
}

class Zerg extends Race {
    @Override
    void attack() {
        System.out.println("저그: 발톱으로 공격한다!");
    }

    @Override
    void move() {
        System.out.println("저그: 기어 다닌다.");
    }
}

class Protoss extends Race {
    @Override
    void attack() {
        System.out.println("프로토스: 플라즈마를 발사한다!");
    }

    @Override
    void move() {
        System.out.println("프로토스: 순간이동한다.");
    }
}
  • 그럼 인터페이스는 무엇인가?
    • 모두가 공통으로 사용할 수 있는 능력
interface Healing {
    void heal(); // 치유 능력
}

interface Cloaking {
    void cloak(); // 은폐 능력
}

class Medic extends Terran implements Healing {
    @Override
    public void heal() {
        System.out.println("메딕: 아군을 치료한다!");
    }
}

class Ghost extends Terran implements Cloaking {
    @Override
    public void cloak() {
        System.out.println("고스트: 은폐한다.");
    }
}

 


3. 향상된 for문 정리

  • 향상된 for문이란?
    • 배열이나 컬렉션의 객체를 반복할 때 사용하는 문법
    • 기존 for문보다 코드가 간결해짐!
    • 순차적으로 탐색할 때 유용하지만 특정 인덱스를 건너뛰거나 역순으로는 탐색 불가
  • 일반 for문과 향상된 for문의 차이
    • 일반 for문
      • 특정범위의 요소만 반복하거나 역순으로 반복이 가능
      • 인덱스를 통해 배열의 요소를 직접 변경 가능
    • 향상된 for문
      • 순차적으로 반복할 때만 사용 가능
      • 읽기 전용
 

향상된 for문 | Notion

향상된 for문(Enhanced for loop)은 자바(Java)와 같은 언어에서 배열이나 컬렉션 객체를 반복할 때 사용하는 문법입니다. 일반적인 for문보다 코드가 간결해지고, 반복 작업을 읽기 쉽게 작성할 수 있습

shinelee26.notion.site