2025년 8월 12일 화요일(55일차)

Jeonghoon·2025년 8월 12일

jeonghoon's Study

목록 보기
57/128

🧩 Interface · 상속 · IOC / DI 정리


⚙️ [ Interface ]

공통 기능(예: CRUD, 변환 메소드 등)을 인터페이스화하여 유지보수성과 확장성을 높이는 설계 방식

💡 특징

  • Repository나 Controller의 공통 기능을 인터페이스로 정의
  • CRUD, 변환 메소드 등을 추상 메소드로 지정
  • 제네릭(Generic) 타입을 사용하여 다양한 데이터 타입에 대응 가능

🧱 예시 코드

public interface CRUD_Interface<T> {

    // 추가 기능
    boolean post(T dto);

    // 전체 조회
    ArrayList<T> getAll();

    // 단일 조회
    T getOne(int No);

    // 수정 기능
    boolean update(T dto);

    // 삭제 기능
    boolean delete(T Dto);
}

💬 → 이를 상속받아 각 Repository나 Controller에서 구현


🧬 [ 상속 (Inheritance) ]

공통된 로직(예: DB 연결)을 SuperDao 클래스에 작성하고,
각 Dao(또는 Repository)가 이를 상속받아 코드 중복을 줄임

구분설명
🔹 SuperDaoDB 연결 및 공통 기능을 제공
🔹 하위 DaoSuperDao를 상속받아 기능 사용
⚙️ 구조Controller → Service → Dao(Repository) 순서

기능 구현 시 각각의 기능을 명확히 분리하여 유지보수성을 높인다.


🧾 [ 과정평가 ]

Controller의 반환값은 상황에 따라 다르게 구성해야 한다.

구분설명
🔸 기본 반환단순 데이터 반환
🔸 DTO 기반 반환APIDTO를 활용해 데이터 + 메시지를 함께 반환

🧠 [ 실습 5 ]

🔁 MVC 흐름

Controller → Service → Dao(Repository) 구조 확실히 기억하기

⚙️ Service의 역할

  • 비즈니스 로직 처리
  • DB 연결은 하지 않음 (Dao에 위임)

🧱 Dao의 구조

  • Super 클래스를 만들어 DB 연결 코드 상속받기
  • 코드 중복 제거 및 유지보수성 향상

🧩 JSP 불러오기

<jsp:include page="JSP 경로"></jsp:include>

🔗 URL 쿼리스트링 가져오기

const 쿼리스트링명 = new URLSearchParams(location.search).get('쿼리스트링명');

⚠️ 선택자 주의

document.querySelector('') 사용 시 ., # 등 식별자 필수!


🧨 [ 주의할 오류들 ]

오류 유형원인 / 해결 방법
🚫 Spring 서버 중복 실행 불가Port 중복 시 오류 발생
🔧 Port 강제 종료 방법cmd → netstat -ano → PID 확인 → taskkill /f /pid [PID]
🌍 폴더 공유 구조resources 폴더와 webapp 폴더는 모든 AppStart가 공유
📁 JSP 인식 제한JSP는 webapp 폴더 내 자료만 인식 가능
🌀 브라우저 캐시 문제변경 후 인식 안 될 경우 Ctrl + F5 강력 새로고침
예약어 사용 금지변수/함수/클래스명에 미리 정의된 키워드 사용 불가
🧩 JS 오류 확인콘솔(Console) 창에서 오류 확인 필수

🧭 [ IOC / DI ]

🔹 IOC (Inversion of Control)

  • 제어의 역전: 객체의 생명주기 제어를 개발자가 아닌 스프링 컨테이너가 담당

🔹 DI (Dependency Injection)

  • 객체 간의 의존성 주입
  • @Autowired를 이용해 필요한 객체를 자동으로 주입받음
방법설명
💉 생성자 주입 (권장)가장 안전하고 명확한 방식
⚙️ 필드 주입간단하지만 테스트가 어려움

💡 예시 코드

final SampleService sampleService;

@Autowired
public MemberController(SampleService sampleService){
    this.sampleService = sampleService;
}

0개의 댓글