일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Stack
- C 언어 코딩 도장
- 윤성우의 열혈 자료구조
- JSON
- C programming
- Selection Sorting
- coding test
- 이것이 자바다
- 메모리구조
- 이스케이프 문자
- insertion sort
- stream
- s
- 알기쉬운 알고리즘
- Algorithm
- 혼자 공부하는 C언어
- buffer
- Graph
- R
- 윤성우 열혈자료구조
- list 컬렉션
- datastructure
- Serialization
- Today
- Total
목록전체 글 (514)
Engineering Note
OCP(Open Closed Principle): 개방-폐쇄 원칙은 소프트웨어 구성요소(클래스, 모듈, 삼수 등)는 확장에는 개방적이어야 하고, 수정에는 폐쇄적이어야 한다는 원칙입니다. 즉, 기존의 코드를 변경하지 않고도 시스템의 기능을 확장할 수 있어야 합니다.OCP를 적용하면, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다. 이는 유지보수성과 재사용성을 향상시키는데 도움이 됩니다. 구현 방법: OCP를 적용하기 위해선 다형성을 활용하는 것이 일반적입니다. 인터페이스나 추상 클래스를 사용하여 확장 가능한 부분을 정의하고, 구체적인 구현은 별도의 클래스에서 제공하는 방식입니다. public interface PaymentMethod{ void pay(amount);}public clas..
DIP(Dependency Injection Principle): 의존성 역전 원칙은 객체지향 소프트웨어 설계원칙인 SOLID 원칙 중 하나로, 어떤 모듈이 다른 모듈에 의존해야할 때 구체화(구현)가 아니라 추상화(인터페이스)에 의존하도록 설계하는 원칙(추상클래스나 인터페이스에 의존하도록 설계) DIP의 구현 방법: 의존성 역전 원칙을 구현하는 방법에는 인터페이스나 추상 클래스를 사용하여, 구현 세부 사항에 대한 의존성 대신 추상화에 의존하도록 할 수 있습니다. public interface DataRepository{ void save(Object object);}public class FileDataRepository implements DataRepository{ public void save..
엔지니어는 문제를 해결하는 사람입니다. 문제를 어떻게 정의하느냐에 따라 해결의 방향이 달라집니다. 문제 정의 테스트 코드가 없다 보니 새로운 기능 개발이나 리팩토링을 시도할 때 주저하게 되고, 그 결과 코드가 점점 더 복잡해지는 악순환이 발생했습니다. 리팩토링의 목적은 기존 코드에 영향을 주지 않으면서 유지보수와 확장성이 용이한 구조로 개선하는 것입니다. 하지만 리팩토링 범위를 어디까지 설정할지, 수정 후 어떻게 검증할지 불확실한 상황에서는 설계 범위를 정하는 것 자체가 부담이 되고, 결국 리팩토링이 계속 미뤄지게 됩니다. 핵심 문제는 테스트 코드의 부재로 인해 새로운 기능 적용과 코드 구조 개선에 대한 확신을 가질 수 없다는 것입니다.해결 방안 이 문제의 해결책은 테스트 코드 작성입니다. 테스트 코드를..
에러메세지jakarta.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:304) at jdk.proxy2/jdk.proxy2.$Proxy157.flush(Unknown Source) at com.shop.repository.ItemRepositoryT..
Spring Data JPA를 이용해서 별도의 코드 없이도 CRUD가 실행 가능하다는 사실도 멋지지만, 개발자들에게는 개발 속도를 빠르게 하는 페이징 처리는 정말 매력적인 기능입니다.페이징 처리는 Pageable이라는 타입의 객체를 구성해서 파라미터로 전달하면 됩니다. Pageable은 인터페이스로 설계되어 있고, 일반적으로는 PageRequest.of()라는 기능을 이용해서 개발이 가능합니다. PageRequest.of(페이지 번호, 사이즈): 페이지 번호 0 부터PageRequest.of(페이지 번호, 사이즈, Sort): 정렬 조건 추가PageRequest.of(페이지 번호, 사이즈, Sort.Direction, 속성): 정렬 방향과 여러 속성 지정 파라미터로 Pageable을 이용하면 리턴 타입은..
연관관계 주인JPA에서 양방향 관계로 Entity가 있을 때 외래키를 관리해줄 주인을 정해주어야 한다. JPA는 연관관계의 주인이 어떤 Entity라고 지정하지 않고 연관관계 주인이 아니라는 의미로 'mapped by' 옵션으로 외래키를 관리 하지 않는다고 지정한다.Book과 BookStore 엔티티를 예시로 생각해볼 수 있다. Book과 BookStores는 다대일 관계고, 양방향으로 세팅을 해주었다. Book Entity@Entity@Getter @Setterpublic class Book { @Id @GeneratedValue private Long id; private String isbn; private String title; @ManyToOne priva..
⸻국내에서는 흔히 ‘개발자’라는 단어를 사용하지만, 해외에서는 ‘소프트웨어 엔지니어(Software Engineer)’라는 용어가 더 일반적입니다.두 단어는 비슷하게 들리지만, 실제로는 사고방식과 접근 방식의 방향이 다릅니다.⸻1. 개발자(Developer): 기획 중심의 사고‘개발자’는 주로 제품의 기능을 구현하는 사람으로 인식됩니다.즉, **“무엇을 만들 것인가”**에 초점을 맞춘 사고방식입니다.💡 특징• 기획서나 요구사항을 바탕으로 기능을 구현• 빠른 프로토타이핑과 제품 완성도 중시• 사용자의 경험(UX)과 편의성에 민감• 변화하는 시장 요구에 유연하게 대응• 프레임워크나 라이브러리 중심의 기술 사용🧭 핵심 질문“이 기능을 어떻게 구현할까?”“사용자가 편하게 느끼려면 어떻게 해야 할까?”🧱 사..