개발9 취약한 기반 클래스 문제 문제의 발단 레벨 1 마지막 미션인 체스 미션을 진행하다가, 리뷰어에게 이런 피드백을 받은 적이 있습니다. 추상 메서드가 아닌 메서드를 override하는 것은 코드의 예측가능성이나 일관성의 측면에서 위험합니다. 당장은 문제가 없어보이지만, 코드 중복을 이런 식으로 처리하다보면 취약한 기반 클래스 문제를 맞이하게 될 거에요. 이 리뷰를 받게 된 발단은 이렇습니다. 체스 기물 클래스의 최상위 계층인 Piece, 그리고 그것을 상속하는 각각의 구체 기물들이 있는 상황이었죠. 그런데 도메인 로직을 작성하다보니, Piece로 업캐스팅된 구체 클래스가 Pawn인지 확인할 필요가 있었습니다. 다만, 주변의 여러 크루들로부터 “instanceof 연산자는 좋지 않다!” 라는 말을 자주 듣다 보니, 어떻게 해야 ins.. 2023. 3. 26. JDBC, DB 접근을 위한 자바 표준 인터페이스 JDBC란? JDBC(Java Database Connectivity) 먼저 개념적인 의미부터 살펴볼까요? JDBC는 이름에서도 알 수 있듯이, 자바를 통해서 데이터베이스에 접근할 수 있도록 도와주는 자바 표준 API 입니다. 즉, JDBC API를 통해 자바 코드로 데이터베이스를 연결할 수 있고, SQL 쿼리문을 보내서 쿼리를 실행할 수도 있습니다. 여기서 주목해볼 점은 JDBC가 자바의 표준 API 라는 점입니다. 현존하는 자바 DB 관련 기술들 중, 인기 있는 SQL Mapper나 ORM 기술들 대부분 Low-Level 단에서는 JDBC API가 사용되고 있습니다. 이처럼 JDBC는 자바의 표준 인터페이스로서 정말 다양한 DB 기술들에 사용되고 있는데요, 정말 많이 사용되고 있는 JDBC, 과연 어.. 2023. 3. 12. [Java] 업 캐스팅, 그리고 OCP 원칙 업 캐스팅 (Upcasting) 업 캐스팅을 요약해보자면, 서브 클래스(하위) 타입의 인스턴스를 슈퍼 클래스(상위) 타입으로의 캐스팅(형 변환)을 의미합니다. 말이 좀 어려운데, 코드로 보면 어떤 상황인지 쉽게 이해가 가실 겁니다. class Animal { ... } class Tiger extends Animal { ... } public class Example { public static void main(String[] args) { Animal animalTiger = new Tiger(); // Upcasting } } 이런 상황입니다. 이 경우에는 Animal이 슈퍼 클래스이고 Tiger가 서브 클래스가 되겠죠. 자, 이제 main 함수 안에 업 캐스팅이 일어나고 있는 코드를 보겠습니다. .. 2022. 10. 4. 공부하고 싶은 주제들 [PS] CCW, 선분 교차 판별 Lazy propagation [Java] Layered Architecture 3-Tier Architecture와 MVC의 차이 이펙티브 자바 2022. 10. 3. 이전 1 2 다음