본문 바로가기

💻Dev44

변경감지와 병합 JPA에서 데이터를 변경할때의 기본 메커니즘은 변경 감지(Dirty Checking)이다. 개인적으로 신기하다고 생각해서 정리하게 되었다. 아직은 내용이 많이 부족해서 더 채워야 할 것 같다... 더티 체킹(Dirty Checking) a.k.a 변경 감지란? @Transactional public void updateItem(Long itemId, String name, int price, int stockQuantity) { Item findItem = itemRepository.findOne(itemId); findItem.setName(name); findItem.setPrice(price); findItem.setStockQuantity(stockQuantity); } 위는 pk인 itemId를.. 2024. 1. 6.
aria-label을 사용한 웹 접근성 처리 최근 웹, 모바일 접근성 심사를 진행하면서 대체 텍스트에 대한 부분을 맡게 되었다. 여태까지는 웹 접근성만 했어서 title, alt로 처리했었는데, 모바일 접근성도 하게 되면서 WAI-ARIA를 사용했다. 그리고 Title 속성 사용을 지양해야 하는 이유라는 글을 보고 aria 태그를 적극적으로 활용해야겠다고 생각했다. 간단한 예시로 기록하려고 한다. (안하면 까먹을 것 같아서) 이미 전체적인 CSS가 너무 범용적으로 입혀져 있어서 기존 태그 변화 없이 진행해야 했음을 미리 밝힙니다... 사용 속성 role role은 태그의 역할을 지정하는 속성이다. 정해진 태그만 사용할 수 있음 ex) link, button, tab ... aria-label aria-label 은 태그에 이름표를 붙이는 것과 같다.. 2023. 12. 1.
[Java] ==와 equals() == ==와 ≠ 연산자는 기본 자료형에서만 값 비교를 위해 사용할 수 있다. 참조 자료형에서 사용해도 되지만 참조 자료형에서 사용하면 값을 비교하는 게 아니라 주소값을 비교한다. Parent parent1 = new Parent("hyun"); Parent parent2 = new Parent("hyun"); System.out.println(parent1 == parent2); //false Parent 객체 안에 `String name` 이라는 변수에 같은 값을 넣고 비교해도 결과는 false다. 두 객체는 각자의 생성자를 사용하여 만들었기 때문에 주소값이 다르기 때문이다. equals() 참조 자료형은 `equals()`를 사용하여 비교해야 한다. `equals()` 를 오버라이딩 하지 않으면 ha.. 2023. 11. 5.
함수 작게 만들어라! 함수는 작을수록 좋다. 20줄도 길다. 들여쓰기(indent)는 1단이나 2단을 넘어가면 안 된다. 한 가지만 해라! 함수의 추상화 수준은 하나여야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것이다. 서술적인 이름을 사용하라! 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. IDE에서 이런저런 이름을 시도한 후 최대한 서술적인 이름을 골라도 좋다. 또한 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다. ex) `include.. 2023. 10. 29.
의미 있는 이름 의도를 분명히 밝혀라 변수, 함수, 클래스의 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. // Bad public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) { if (x[0] == 4) { list1.add(x); } } return list1; } // Good public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (int[] cell : gameBoard) { if (cell[STATUS_VALUE] == FLAGGED) { flaggedCells.add(cell); } } return flaggedCells; } `if (c.. 2023. 10. 18.
깨끗한 코드 깨끗한 코드는 ‘보기에 즐거운’ 코드다. 책의 서두에서 핵심이 나온 거 아닐까, 어렵게 접근하지 않기로 했다. 신입이 실무 프로젝트에 투입됐을 때 제일 먼저 하는 것은 코드를 보며 업무 프로세스를 파악하는 것이다. 이때 주석이 없어도 책처럼 읽을 수 있어야 한다. (일부의 주석은 필요하겠지만) 철저한 오류 처리 세세한 사항까지 꼼꼼하게 신경 쓰라는 말이다. 프로그래머들이 대충 넘어가는 부분 중 하나가 오류 처리다. 가독성 깨끗한 코드는 잘 쓴 문장처럼 읽혀야 한다. 다른 사람이 고치기 쉽다. TDD 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다. 아무리 코드가 우아해도, 아무리 가독성이 높아도, 테스트 케이스가 없으면 깨끗하지 않다. 중복 같은 작업을 여러 차례 반복한다면 코드가 아이디어를 제대로 표.. 2023. 10. 17.
@WebMvcTest 와 @EnableJpaAuditing 스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 읽다가 궁금해서 포스팅한 내용입니다. `@WebMvcTest`를 사용한 테스트 코드가 있었다. @RunWith(SpringRunner.class) @WebMvcTest(controllers = HelloController.class) public class HelloControllerTest { ... } 이 테스트 코드를 돌리니 IllegalArgumentException: At least one JPA metamodel must be present!라는 에러가 발생했다. 책에는 단순히 아래와 같이 설명돼 있었다.. @WebMvcTest는 @EnableJpaAuditing로 인해 발생한다. @EnableJpaAuditing를 사용하기 위해선 최소 하나의.. 2023. 9. 29.
[자바의 정석] - 인터페이스(interface) 인터페이스(interface) 인터페이스를 이해하려면 추상화, 다형성에 대한 이해가 필수적이다. ❓인터페이스란 ⭐ 추상 메서드의 집합 핵심 구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public) interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수목록); } 인터페이스는 변수를 가질 수 없다. 무조건 상수만 가질 수 있다. 메서드는 전부 다 추상메서드 = 추상메서드의 집합 interface PlayingCared { public static final int SPACE = 4; final int DIAMOND = 3; //public static final int DIAMOND = 3; static int.. 2023. 9. 26.
[자바의 정석] - 다형성 다형성 객체지향에서 제일 중요한 개념이다. 다형성을 이해 못 하면 추상클래스, 인터페이스 이해를 못 할 것이다. 여러 가지 형태를 가질 수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 class SmartTv extends Tv {} Tv t = new SmartTv(); //타입 불일치. ❓ 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이 가정 `Tv` 클래스의 멤버(참조변수, 메서드): 5개 `SmartTv` 클래스의 멤버(참조변수, 메서드): 7개 `SmartTv s = new SmartTv();` 타입이 일치할 때는 멤버 7개를 다 사용할 수 있다. `Tv t = new SmartTv();` 일치하지 않을 때는 멤버 5개만 사용할 수 있다. 자손 타입의 참조변수로 .. 2023. 9. 25.