728x90

분류 전체보기 420

[Java] 자바로 테스트 코드 작성 순서 알아보기

최범균님의 '테스트 주도 개발 시작하기'를 읽으면서 정리해본 글. 1. 초반에 복잡한 테스트부터 시작X 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트로 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 2. 구현하기 쉬운 테스트부터 시작하기 구현하기쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다. 보통 수 분에서 십여 분 이내에 구현을 완료해서 테스트를 통과시킬 수 있을 만큼 쉬운 것을 선택한다. 3. 예외 상황을 먼저 테스트 다양한 예외 상황은 복잡한 if-else 블록을 동반할 때가 많다. 예외 상황을 전혀 고려하지 않은 코드에 예외 상황을 반영하려면 코드의 구조를 뒤집거나 코드 중간에 예외 상황을 처리하기 위해 조건문을 중복해서 추가하는 일이 벌어진다. ..

[Java] 자바로 TDD 시작하기

최범균님의 '테스트 주도 개발 시작하기'를 읽으면서 정리해본 글. 1. TDD 이전의 개발 1. 만들 기능에 대해 설계를 고민한다. 어떤 클래스와 인터페이스를 도출할지 고민하고각 타입에 어떤 메서드를 넣을지 시간을 들여 생각 2. 1번 단계를 수행하면서 구현에 대해서도 고민한다. 대략 어떻게 구현하면 될지 머릿속에 그려지면 코드 작성 3. 기능에 대한 구현을 완료한 것 같으면 기능을 테스트한다. 이 과정에서 원하는 대로 동작하지 않거나 문제가 발생하면 2번 단계에서 작성한 코드를 디버깅 하면서 원인을 찾는다. 2. TDD 맛보기 TDD는 구현이 먼저가 아닌 테스트부터 시작한다. 간단한 덧셈 기능을 TDD로 구현하면 public class CalculatorTest { @Test void plus() { ..

[Java] Null 대신 빈 컬렉션이나 배열을 리턴할 것

컬렉션이 비어 있을 경우 null을 리턴하기도 한다. 그 예시로 private final List exampleList = ...; public List getExample() { return exampleList.isEmpty() ? null : new ArrayList(exampleList); } 이렇게 사용을 하기도 하는데, 이렇게 할 경우 리턴 받는 쪽에서 null을 처리하는 코드를 추가로 작성해야 한다. 혹시나 null 처리 코드가 없을 경우 에러가 발생할 확률이 높다. 이를 방지하기 위해서는 public List getExample() { return new ArrayList(exampleList); } 이렇게만 해주면 null처리 코드가 없어도 에러가 발생할 확률을 낮출 수 있다. 하지만 이..

[Java] Stream 사용 시 주의 사항

스트림은 자바 8부터 도입된 기능으로, 데이터 처리를 간결하고 효율적으로 할 수 있도록 지원한다. 이를 적절히 활용하면 데이터 처리 작업을 더욱 쉽고 효율적으로 수행할 수 있다. 스트림은 연속된 데이터 처리, 지연 평가(Lazy evaluation), 파이프라인 처리, 병렬 처리, 스트림 연산, 외부 반복 숨김 등의 특징이 있다. 하지만 주의해서 사용해야 한다. 이유 리소스 누수: 스트림은 외부 리소스(파일, 네트워크 연결 등)와 관련될 수 있다. 스트림을 제대로 닫지 않으면 리소스 누수가 발생할 수 있다. 따라서, 스트림 사용 후에는 반드시 명시적으로 닫아야 한다. 예외 발생 여부와 관계없이 finally 블록이나 try-with-resources 문을 사용하여 스트림을 닫아야 한다. 버퍼링과 플러싱:..

[Java] Array보다 List를 사용해야하는 이유

자바에서 배열과 리스트(List)는 각각 다른 특징과 용도를 가지고 있다. List를 더 사용해야하는 이유를 정리했다. 크기 조정: 배열의 크기는 선언할 때 정해지고, 이후에는 변경할 수 없다. 반면에 List는 동적으로 크기를 조정할 수 있다. 요소를 추가하거나 제거할 때 List의 크기가 자동으로 조정되므로 편리하다. 삽입과 삭제: List는 요소의 삽입과 삭제가 쉽다. 요소를 삽입하려면 인덱스를 지정하고 값을 추가하면 되며, 요소를 삭제하려면 인덱스나 값으로 제거할 수 있습니다. 배열의 경우 요소를 삽입하거나 삭제하려면 많은 작업이 필요하다. 유연한 자료형: List는 여러 가지 자료형의 요소를 저장할 수 있다. 예를 들어, 정수, 문자열, 객체 등 다양한 유형의 데이터를 한 List에 저장할 수 ..

[Python] ENUM 타입 사용하기

파이썬에서 Enum(열거형) 타입을 사용하려면 enum 모듈을 사용해야 한다. enum 모듈은 파이썬 3.4부터 표준 라이브러리에 포함되어 있다. 아래 코드는 Enum 타입을 정의하고 사용하는 간단한 예제 from enum import Enum class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 print(Color.RED) # Color.RED print(Color.RED.value) # 1 print(Color['GREEN']) # Color.GREEN print(list(Color)) # [, , ] 위 예제에서 Color 클래스는 Enum을 상속하고 있다. Enum 클래스의 각 멤버는 Enum 상수를 나타내며, 상수의 이름과 값을 정의할 수 있다. Color.RED와..

개발/Python 2023.06.10

[Python] @classmethod 사용하기

@classmethod는 파이썬에서 사용되는 데코레이터(decorator) 이 데코레이터를 클래스 메서드(class method) 위에 사용하면 해당 메서드가 클래스에 속하는 메서드임을 나타낸다. 클래스 메서드는 인스턴스가 아닌 클래스 자체에 연관된 작업을 수행하는 메서드. 일반적인 인스턴스 메서드와는 달리, 클래스 메서드는 첫 번째 매개변수로 클래스 자체를 받는 cls 매개변수를 사용한다. 클래스 메서드는 클래스 레벨의 작업을 수행하는 데 유용함. 예를 들어, 클래스 변수를 조작하거나 변경하는 작업, 클래스의 다른 메서드를 호출하거나 인스턴스를 생성하는 작업 등을 수행할 수 있다. - @classmethod를 사용하여 클래스 메서드를 정의하고 호출하는 간단한 예시 class MyClass: class_..

개발/Python 2023.06.09

REST API 란?

REST API는 Representational State Transfer Application Programming Interface의 약자이다. REST는 웹 서비스를 구현하기 위한 아키텍처 스타일이며, 네트워크를 통해 다른 애플리케이션들이 데이터를 요청하고 전송할 수 있도록 하는 프로그래밍 인터페이스이다. REST API는 웹 기술을 기반으로 하며, HTTP 프로토콜을 사용하여 데이터를 요청하고 응답하는 방식으로 작동한다. REST API는 주로 JSON 형식으로 데이터를 주고받는다. 따라서 클라이언트 애플리케이션은 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 서버의 리소스에 대한 작업을 요청하고, 서버는 JSON 형식으로 데이터를 응답한다. REST API의 핵심 개념..

개발/ETC 2023.06.08

[FastAPI] FastAPI 시작하기 Response Model ~ File 요청

회사에서 Python + FastAPI로 개발을 하게 되었다. 그래서 공식문서를 훑어보았다. 1. Return Type API 호출 후 return 해줄 때 FastAPI에서 검증을 거친다. 데이터가 유효하지 않은 경우 (예: 필드가 누락된 경우)는 앱 코드가 제대로 작동하지 않거나 예상한대로 반환하지 않는 것을 의미하므로, 잘못된 데이터를 반환하는 대신 서버 오류를 반환한다. 이렇게 함으로써 사용자와 클라이언트는 예상한 데이터와 데이터 구조를 정확히 수신할 수 있음을 확신할 수 있다. - main.py from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel): name: str descr..

개발/Python 2023.05.17

[FastAPI] FastAPI 시작하기 Request Body~Parameter Validations

회사에서 Python + FastAPI로 개발을 하게 되었다. 그래서 공식문서를 훑어보았다. 1. Request Body 클라이언트(예: 브라우저)에서 API로 데이터를 보내야 할 때 request body으로 보낸다. 넘길 파라미터가 한, 두개 면 그냥 넘기고 받으면 되지만, 넘길 파라미터가 많으면 코드량이 많아진다. Request Body는 클라이언트에서 API로 보내는 데이터. Response Body는 API가 클라이언트로 보내는 데이터. - main.py from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name: str description: str | None = None price: float ..

개발/Python 2023.05.16
728x90