전체 글

10월 15일 우테코 7기 프리코스가 시작되었다! 1주차 과제는 문자열 덧셈 계산기였다.https://github.com/sgn07124/java-calculator-7/tree/sgn07124 GitHub - sgn07124/java-calculator-7Contribute to sgn07124/java-calculator-7 development by creating an account on GitHub.github.com 처음 문제를 읽었을 때는 생각보다 문자가 짧았던 것 같다. 위에서 부터 순서대로 과제 진행 요구 사항, 기능 요구 사항, 입출력 요구 사항, 프로그래밍 요구 사항을 꼼꼼히 읽은 후 방향을 잡기 시작했다. 과제를 시작하기 전에 먼저 한 일은 미션 저장소를 fork하고 branch를 ..
보호되어 있는 글입니다.
객체지향과 인지 능력사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임라고 말하는 이유는 객체지향은 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다.인간은 좀 더 단순한 객체들로 주변을 분해함으로써 자신이 몸 담고 있는 세상을 이해하려고 한다. 따라서 객체는 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다.하지만 유사성은 여기까지다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것이다. 사람의 손길 없이 스스로 불을 밝힐 수 없는 현실세계의 전등과는 다르게 소프트웨어 세계의 전등은 스스로 처리가 가능하다. 이렇게 우리는 유사하면서도 이질적인 객체지향의 세계를 바라볼..
이 책에서는 객체지향을 실세계에 비유하여 설명한다.객체를 현실 세계의 생명체에 비유하는 것은 상태(캡슐화)와 행위(자율성)를 설명하는 데 효과적이다. 또한 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성해 나가는 과정인 메시지를 주고받으며 공동의 목표를 달성하기 위해 협력하는 객체들의 관계를 설명하는 데 적합하다.그리고 이런 사물을 기반으로 객체를 구현하는 개념은 객체지향 설계의 핵심인 완견연결성을 설명하는 데 적합하기 때문이다.협력하는 사람들"주문한 커피를 손님에게 제공하기 위해" 협력하는 과정에서 손님, 캐시어, 바리스타는 각자의 책임을 다한다. 커피 주문이라는 협력에 참여하는 모든 이들이 커피를 제공하기 위해 역할과 책임을 다한다는 것이다. 즉, 객체지향에서 중..
문제 상황처음에 프로젝트 설정 시에는 DB(MySQL) 연결이 정상적으로 된 것을 확인했지만, 엔티티를 작성한 후 다시 실행했을 때는, DB 연결이 정상적으로 되지 않았다.환경Spring Boot 3.3.4MySQL 8.0.34로그2024-09-20T16:23:06.654+09:00 WARN 83120 --- [ restartedMain] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadatajava.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(ja..
문제https://www.acmicpc.net/problem/20040풀이문제를 정리해보면 0부터 n-1 까지의 고유한 번호가 부여된 평면상의 점 n개가 주어지며, 이 중 어느 세점도 일직선 위에 놓이지 않는다.매 차례마다 이를 잇는 선분을 그린다. → 이전에 그은 선분을 다시 글을 수 없으며, 이미 그린 선분과 교차는 가능하다.처음으로 사이클(플레이어들이 그린 선분들의 부분집합)이 완성되는 순간 게임이 종료된다.게임의 진행 상황이 주어지면 몇 번째 차례에서 사이클이 완성 되었는지를 판단하고, 혹은 게임이 진행 중인지를 판단하는 프로그램을 작성해야 한다. 연결을 할 때마다 카운트를 하며 사이클이 생기면 종료를 해야하는데, 사이클을 판단하는 방법으로 Union-find 자료구조를 사용하면 된다.Union-..
사용자 정의 Repository 구현Spring Data JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많기 때문에 Spring Data JPA 리포지토리를 사용하여 인터페이스만 정의하고 구현체는 스프링이 자동 생성하도록 한다.만약, 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면(JPA 직접 사용, 스프링 JDBC Template 사용, MyBatis 사용, QueryDSL 사용, DB 커넥션 직접 사용 등) 사용자 정의 인터페이스를 사용한다.사용 방법1. 사용자 정의 Interface 생성public interface MemberRepositoryCustom { // 이름은 자유 List findMemberCustom();}2. 사용자 정의 Interface의..
@EntityGraphFetch Join아래 코드의 상황은 member1이 teamA를 참조하고, member2가 teamB를 참조하고 있으며, Member와 Team의 관계는 @ManyToOne 지연로딩 관계이다. @Testpublic void findMemberLazy() { // given // member1 -> teamA // member2 -> teamB Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); Member member1 = new Member("member1", 10, teamA..
JPA는 엔티티를 조회한 뒤, commit 시점에 더티체킹을 통해 수정된 값이 있다면, update 쿼리를 날린다. 즉, 엔티티마다 각각 더티체킹을 하여 update를 각각 날린다.(JPA의 수정)하지만, 많은 데이터를 변경해야 하는 경우, 위 방식은 성능이 좋지 않다. 따라서 DB에 한 번의 update 쿼리를 날리는 것이 보다 효과적이다.(벌크성 수정 쿼리)순수 JPA를 사용한 벌크성 수정 쿼리public int bulkAgePlus(int age) { return em.createQuery("update Member m set m.age = m.age + 1 where m.age >= :age") // 이 조건에 만족하는 것들은 모두 +1이 됨 .setParameter("..
JPA 페이징과 정렬Spring Data JPA는 페이징 및 정렬 기능을 지원한다.순수 JPA 페이징과 정렬아래의 조건으로 페이징과 정렬을 사용해 보겠다검색 조건 : 나이가 10살정렬 조건 : 이름으로 내림차순페이징 조건 : 첫 번째 페이지, 페이지당 보여줄 데이터는 3건public List findByPage(int age, int offset, int limit) { return em.createQuery("select m from Member m where m.age = :age order by m.username desc ") .setParameter("age", age) .setFirstResult(offset) // 어디서부터 가져올 것인지 ..