현재의 내가 미래의 나에게
close
프로필 배경
프로필 로고

현재의 내가 미래의 나에게

  • 분류 전체보기 (55)
    • Spring (11)
    • Database (1)
    • Java (3)
    • CI CD (2)
      • GitHub Action (1)
    • Docker (1)
    • Git, GitHub (6)
      • Git (3)
    • 개발 환경 설정 (4)
    • 운영체제 (3)
    • 인턴 (2)
    • 외주 (3)
    • 강의메모 (11)
    • 메모 (2)
    • 책 (4)
      • 자바 웹 개발 워크북 (2)
      • 오브젝트 (2)
    • 우아한 테크 코스 (1)
  • 홈
  • 태그
  • 방명록

인터페이스와 추상 클래스 비교

실무 관점에서 본 인터페이스 vs. 추상 클래스 비교인터페이스와 추상 클래스는 객체지향 설계에서 핵심적인 개념이며, 실무에서는 상황에 따라 적절히 선택해야 합니다. 아래에서는 언제 인터페이스를 사용하고, 언제 추상 클래스를 사용하는지, 그리고 실제로 더 자주 사용하는 개념과 그 이유를 정리해 보겠습니다.🚀 인터페이스 vs. 추상 클래스 실무 비교비교 요소 인터페이스 (Interface) 추상 클래스 (Abstract Class)상속 구조다중 구현 가능 (클래스는 여러 개의 인터페이스를 구현 가능)단일 상속만 가능 (다른 클래스를 동시에 상속받을 수 없음)상태(State) 유지불가능 (멤버 변수 선언 불가, Java 8 이후 default 메서드로 일부 구현 가능)가능 (멤버 변수 선언 및 상태 유지 가..

  • format_list_bulleted Java
  • · 2025. 2. 3.
  • textsms

인터페이스에 대한 생각 정리

1. 인터페이스란 무엇인가?인터페이스(Interface)는 자바의 핵심 개념 중 하나로, 클래스가 구현해야 하는 메서드의 명세를 정의하는 추상적인 타입이다. 인터페이스는 다음과 같은 특징을 갖는다.메서드의 시그니처만 정의하고, 구체적인 구현은 제공하지 않는다.메서드의 시그니처 : 메서드의 이름과 그 메서드가 받을 파라미터의 종류 및 개수를 의미다중 구현(multiple inheritance)을 가능하게 한다.다중 구현 : 한 클래스가 두 개 이상의 부모 클래스를 상속받는 개념구현 클래스의 계약(Contract) 역할을 수행하여 코드의 유연성과 확장성을 높인다.계약 : 특정 규칙을 지켜야 한다는 약속을 의미인터페이스를 구현한 클래스는 반드시 메서드들을 구체적으로 구현해야 한다는 규칙(계약)을 지켜야 한다...

  • format_list_bulleted Java
  • · 2025. 2. 3.
  • textsms
[외주] 트래블록 프로젝트 리팩토링 회고

[외주] 트래블록 프로젝트 리팩토링 회고

앞서 세웠던 리팩토링 방향성에 대해직접 리팩토링하면서 배운 점과 느꼈던 점에 대해 작성해보려고 한다. 리팩토링을 통해 해당 프로젝트에서 얻고자 했던 것들이 몇 가지 있었다. 도메인 계층을 분리하여 비즈니스 로직을 보다 명확히 이동시키기데이터(DB)에 의존적인 코드가 아닌, 비즈니스 로직 중심의 코드로 변경하기의존성 역전 원칙(DIP)을 적용하여, 의존성을 낮추고 테스트에 용이한 코드로 변경하기  왜 리팩토링이 필요한가?이전에 작성했던 글에서는 리팩토링의 방향성만 정의하고,왜 그 방향성을 선택했는지에 대한 설명이 부족했던 것 같다.이번 글에서는 그 이유를 먼저 언급하고자 한다. 의존성 역전 원칙(DIP)을 적용하여, 의존성을 낮추고 테스트에 용이한 코드로 변경하기 리팩토링 방향성을 설정할 때, 가장 먼저 ..

  • format_list_bulleted 외주
  • · 2024. 8. 23.
  • textsms

[외주] 리팩토링 방향성

이전 글에서 주저리 주저리 일대기까지 쓰면서마지막에 외주 프로젝트 관련 느꼈던 고민거리나 문제들을 해결하고자,우선 리팩토링부터을 진행하고자 한다. 일단 리팩토링을 하려고 하는 이유현재 구현에 급급해서 객체지향적인 코드보단 절차지향적인 코드로 구현되어있다.(이는 책을 통해서도 많이 깨달았는데.)그 때문인지 테스트 작성를 짜는데에 있어서 의존성 및 여러 역할과 책임이 제대로 분리되지 않아서 어려움이 있다. 테스트 작성 시 의존성 관련해서 어려움을 겪고 있다면,설계에 대한 문제의 가능성이 있다고 알려주는 경우가 많다고 한다.  그렇기에 객체지향적이면서 SOLID한 코드로 이번에 리팩토링하려고 한다.  리팩토링으로 얻고자 하는 것- 객체지향적 + SOLID한 코드를 만들어 유지보수가 수월하도록 하기 위함- 데이..

  • format_list_bulleted 외주
  • · 2024. 7. 10.
  • textsms
[외주] 외주 같지 않은 외주 작업 - 제대로 된 스프링 프로젝트 경험하기 (feat. 그 동안의 나를 되돌아보기)

[외주] 외주 같지 않은 외주 작업 - 제대로 된 스프링 프로젝트 경험하기 (feat. 그 동안의 나를 되돌아보기)

뜬금없이 뿜뿜해버렸따!원래는 외주프로젝트에 대한 리팩토링을 적으려고 했는데갑자기 그동안의 나에 대해 적어보고 리마인드하고 싶은 욕구가 뿜뿜해버렸따!! 으아악!!!아무도 궁금해하지 않을 수 있지만,지금까지 살아온 나의 행적?!들을 되돌아보고앞으로의 방향도 구체적으로 잡아가고 이렇게 생각나는대로 글을 적어본다. 그동안의 나를 돌아보며,그동안 블로그에 나에 대한 걸 적은 기억이 거의 없는 듯하여 오늘은 지금까지 살아온? 나를 돌이켜보고어떻게 하다가 Semi 외주를 맡았는지까지 적어보려고 합니다.ㅎㅎ 처음 개발을 하게 된 건 3학년 2학기 어느 날이었죠..때는 대학교 3학년 2학기 개발 경험이 아예 없던 저는 대외활동을 하고 싶어서여러 동아리나 프로젝트에 "나도 할래요" 라면서 수많은 지원서를 냈었다.그러다가 ..

  • format_list_bulleted 외주
  • · 2024. 7. 10.
  • textsms
[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch10. 스프링 트랜잭션 전파 1 - 기본

[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch10. 스프링 트랜잭션 전파 1 - 기본

(복습) 스프링 트랜잭션 전파 - 트랜잭션 (각각) 두 번 사용트랜잭션이 각각 따로 사용되는 경우 :하나의 트랜잭션이 완전히 끝나고 나서 다음 트랜잭션을 수행한다.  예시 코드@Testvoid double_commit() { log.info("트랜잭션1 시작"); TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션1 커밋"); txManager.commit(tx1); log.info("트랜잭션2 시작"); TransactionStatus tx2 = txManager.getTransaction(newDefaultTransactionAttribute..

  • format_list_bulleted 강의메모
  • · 2024. 4. 27.
  • textsms
[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch9. 스프링 트랜잭션 이해(feat. 트랜잭션 AOP 사용시 주의 사항)

[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch9. 스프링 트랜잭션 이해(feat. 트랜잭션 AOP 사용시 주의 사항)

트랜잭션 적용 확인@Transactional 을 통해 선언적 트랜잭션 방식을 사용하면 단순히 애노테이션 하나로 트랜잭션을 적용할 수 있다.이 기능은 트랜잭션 관련 코드가 눈에 보이지 않고, AOP를 기반으로 동작하기 때문에, 실제 트랜잭션이 적용되고 있는지 아닌지를 확인하기가 어렵다. 확인하는 방법을 알아보자@Slf4j@SpringBootTestpublic class TxBasicTest { @Autowired BasicService basicService; @Test void proxyCheck() { //BasicService$$EnhancerBySpringCGLIB... log.info("aop class={}", basicService.getClass..

  • format_list_bulleted 강의메모
  • · 2024. 4. 27.
  • textsms
[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch3. 테스트 (feat. 임베디드 모드 쓰고 싶다면? build.gradle에 우선 h2 설정부터!!)

[강의메모] 스프링 DB 2편 -데이터 접근 활용 기술 - ch3. 테스트 (feat. 임베디드 모드 쓰고 싶다면? build.gradle에 우선 h2 설정부터!!)

@SpringBootTest@SpringBootTest는 @SpringBootApplicatoin를 찾아서 설정으로 사용한다.  테스트 - 데이터베이스 분리컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용하고 있으니 테스트에서 문제가 발생한다.이런 문제를 해결하려면 테스트를 다른 환경과 철저하게 분리해야 한다. 가장 간단한 방법은 테스트 전용 데이터베이스를 별도로 운영하는 것이다. 테스트에서 매우 중요한 원칙은 다음과 같다.테스트는 다른 테스트와 격리해야 한다. 테스트는 반복해서 실행할 수 있어야 한다.DELETE SQL을 사용하면 되는 거 아냐? 테스트가 끝날 때 마다 추가한 데이터에 DELETE SQL 을 사용해도 되겠지만, 이 방법도 궁극적인 해결책은 아니다. 만약 테스트 과정..

  • format_list_bulleted 강의메모
  • · 2024. 4. 27.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 7
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (55)
    • Spring (11)
    • Database (1)
    • Java (3)
    • CI CD (2)
      • GitHub Action (1)
    • Docker (1)
    • Git, GitHub (6)
      • Git (3)
    • 개발 환경 설정 (4)
    • 운영체제 (3)
    • 인턴 (2)
    • 외주 (3)
    • 강의메모 (11)
    • 메모 (2)
    • 책 (4)
      • 자바 웹 개발 워크북 (2)
      • 오브젝트 (2)
    • 우아한 테크 코스 (1)
최근 글
인기 글
최근 댓글
태그
  • #map-get()
  • #pos-center
  • #Sass-Text Style
  • #$map( key: value )
  • #Sass
  • #type-of
  • #flexbox
  • #Psuedo-Element
  • #mixin_position
  • #그리드_시스템_훈련
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바