JAVA 25

[Java] 테스트에서 사용하는 AssertJ의 AssertThat이란?

[테스트 토크 작성 방법]1. given : 어떤 상황이 주어졌을 때2. when : ~를 실행했을 때3. then : 검증한 결과가 ~가 나와야함 given, when는 실행 단계, then는 검증 단계라고 할 수 있다.- 실행 단계 : 사용자 입력을 모방해 테스트할 로직을 실행시킴- 검증 단계 : 실행 단계가 예상된 대로 동작하는지 검증 ■ assertThat()은 테스트에서만 쓰일까?- 결과가 예상과 같은지를 검증할 때 사용- 주로 src/test/java 디렉토리에 있는 단위 테스트, 통합 테스트 등에서 사용 ■ AssertJ란?assertion을 제공하는 자바 라이브러리이다. 에러 메세지와 테스트 코드의 가독성을 매우 높여준다. ■ AssertJ 메소드 임포트 ■ assertThat 메서드 정리..

JAVA 2025.06.15

[JAVA] DIP (의존 관계 역전 원칙)

■ DIP구체화의 의존하지 말고 추상화(인터페이스, 추상 클래스)에 의존해야 한다. 예제)● Car는 Engine을 사용해서 움직인다.● 엔진 종류는 GasEngine, ElectricEngine이 있다.■ DIP 위반 (엔진에 직접 의존)class GasEngine { public void start() { System.out.println("휘발유 엔진 시동"); }}class Car { private GasEngine engine = new GasEngine(); // 직접 생성 (구체 클래스에 의존) public void drive() { engine.start(); System.out.println("차가 출발합니다!"); }}1)..

JAVA 2025.04.12

[JAVA] ISP (인터페이스 분리 원칙)

■ ISP- 인터페이스를 각각 사용에 맞게 분리해야한다는 원칙- SRP 원칙은 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조- 인터페이스를 사용하는 클라이언트를 기준으로 분리함으로써 클라이언트의 목적과 용도에 적합한 인터페이스 만 제공  ■ ISP 적용 전// 너무 많은 책임을 지는 인터페이스public interface Worker { void work(); void eat(); void sleep();}// 로봇도 이 인터페이스를 구현해야 함public class Robot implements Worker { @Override public void work() { System.out.println("로봇이 작업 중..."); } ..

JAVA 2025.04.08

[JAVA] LSP (리스코프 치환 원칙)

■ LSP- 부모 객체와 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙- 자식 클래스는 부모 클래스가 정의한 계약을 위반하지 않고 부모 클래스의 기능을 확장하거나 수정할 수 있어야 한다   ■ LSP 위반한 예제// 부모 클래스class Bird { public void fly() { System.out.println("새는 날 수 있다."); }}// 자식 클래스class chicken extends Bird { @Override public void fly() { throw new ChickenException("닭은 날지 못한다."); }}// 테스트 클래스public class LSPV..

JAVA 2025.04.07

[JAVA] SRP (단일 책임 원칙)

■ SRP클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙이다. 이 원칙에 따라 클래스는 하나의 이유로 변경되어야 한다. ■ SRP 따르지 않은 예시class User { private String name; private String email; public User(String name, String email) { this.name = name; this.email = email; } public String getName() { return name; } public String getEmail() { return email; }}class UserManager { public void saveU..

JAVA 2025.04.06

[JAVA] OCP (개방 폐쇄 원칙)

● OCP - Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때 , 기존 코드는 확장할 수 있어야 한다.- Closed for modification : 기존의 코드는 수정되지 않아야 한다. ■ 새로운 차량의 추가- Driver의 코드는 변경하지 않고, 다른 차들이 늘어나도 Car를 사용하는 Driver 코드 전혀 변경하지 않는다.  ■ 확장에 열려있다는 의미- Car 인터페이스를 사용해 새로운 차량을 추가할 수 있고 Car 인터페이스를 구현해서 기능을 추가할 수 있다는 의미 그러면 Driver도 Car 인터페이스를 통해 새롭게 추가된 차량을 자유롭게 호출할 수 있다.  ■ 코드 수정은 닫혀 있다는 의미- 새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정..

JAVA 2025.04.06

[JAVA] 다형성(2) - abstract, 인터페이스

추상 클래스- 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다. 대신에 상속을 목적으로 사용되고 부모클래스 역할을 담당한다.abstract class A { ...}- 추상 클래스는 클래스를 선언할 때 abstract 키워드를 붙인다.- new A()처럼 직접 인스턴스를 생성하지 못하는 제약이 추가된 것 추상 메서드- 부모 클래스를 상속 받는 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의할 수 있다. 이름 그대로 추상적인 개념을 제공하는 메서드 따라서 실체가 존재하지 않고 메서드 바디가 없다.public abstarct void sound();- 추상 메서드는 메서드 앞에 abstarct 키워드를 붙인다.- 추상 메서드가 하나라도 있는 ..

JAVA 2025.03.30

[JAVA] 다형성(1) - 다형성 참조, 캐스팅, instanceof 연산자

다형성프로그래밍에서 한 객체가 여러 타입의 객체로 취급할 수 있는 능력-> 하나의 객체가 다른 타입으로 사용될 수 있다. 다형적 참조-> 자바에선 부모는 자식을 품을 수 있다.ex) Parent poly = new Child();- Parent Poly는 부모 타입이고 new Child()를 통해 생성된 결과는 Child 타입이다.- 반대로 자식 타입은 부모 타입 못 담는다. Child child1 = new Parent(); 오류 발생- 자식 밑에 자식 즉 ,손자 타입이 있다면 그 하위 타입도 참조 가능 Parent poly = new Parnet()Parent poly = new Child() //Parent 자식Parent poly = new Grandson() //Child 자식 캐스팅 (Cast..

JAVA 2025.03.23

[JAVA] 상속

■ 상속extends 키워드를 사용하고 대상은 하나만 선택 가능하다. ex) Animal , Pet 부모 클래스 둘 중 하나만 선택해야함. 두 개오면 뭘 불러와야 할 지 모름class Dog extends Animal Pet Car 클래스는 부모클래스이고 GasCar는 자식 클래스이다.public class Car { public void move() { System.out.println("차를 이동합니다."); } }public class GasCar extends Car { public void fillUp() { System.out.println("기름을 주유합니다."); } }public class CarMain { public static void m..

JAVA 2025.03.20

[JAVA] final

final- 변수에 final 키워드가 붙으면 더는 값을 변경할 수 없다. ■ final 변수public class A { public static void main(String[] args) { fianl int data1; // final 지역 변수 data1 = 10; //최초 한번만 할당 가능 final int data2 = 10; //final 지역 변수2 method(10); } static void method(final int parameter) { //parameter = 20; 컴파일 오류 } } - final 붙은 지역 변수는 최초 한 번만 값을 할당할 수 있고, 값을 변경하게 되면 에러 발생 - 필드(멤버..

JAVA 2025.03.16