분류 전체보기 80

[우아한테크코스] 레벨1 되돌아보기(1) - 단위테스트/코드 품질

🍋 단위테스트 1. 내가 단위 테스트를 작성하는 이유는 무엇인가? 나는 레벨1의 후반까지 계속 단위 테스트를 작성하면서도, '단위 테스트, 그거 꼭 작성해야해?' 라는 의문을 계속 가지고 갔었다. 남들도 하니까, 리뷰어가 테스트가 부족하다하니까, 관성적으로 작성했던 적도 많다. 하지만 최근으로 올수록 복잡해진 미션을 수행하면서 단위 테스트를 작성해야 하는 이유를 어렴풋이 느낄 수 있게 되었다. 내 머리는 내가 생각하는 것보다 멍청하기 때문이다. 머리로 생각만 하는 것보다 직접 쓰면서 확인하는 것이 사고의 오류를 잡아내기 쉽다. 일일이 써서 확인하는 일은, 특히 테스트 해야 할 복잡한 경우의 수가 많을수록 강한 위력을 발휘했다. 블랙잭 미션을 하면서 승패를 가르는 결과를 판단할 때 많은 경우의 수가 필요했..

[JAVA 자바] chat gpt와 SOLID 원칙에 대해 공부를 해보았다(2)

👇chat gpt와 SOLID 원칙에 대해 공부를 해보았다 1편👇 [JAVA 자바] chat gpt와 SOLID 원칙에 대해 공부를 해보았다(1) 요즘 책을 읽으면서도, 강의를 들으면서도 가끔 SOLID 원칙이 언급되길래, 한번 chat gpt와 대화하며 공부한 내용을 정리해 보았다. 🤔 SOLID 원칙이란? 객체 지향 프로그래밍에서 유지보수와 확장을 finger-ineedyourhelp.tistory.com 지난 포스팅에 이어, 이번 포스팅에서는 인터페이스 분리 원칙(ISP)와 의존관계 역전원칙(DIP)를 다룬다. 🍏 I 인터페이스 분리 원칙 (ISP, Interface segregation principle) 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다. 즉, 인터페이스를 작게 분..

[JAVA 자바] chat gpt와 SOLID 원칙에 대해 공부를 해보았다(1)

요즘 책을 읽으면서도, 강의를 들으면서도 가끔 SOLID 원칙이 언급되길래, 한번 chat gpt와 대화하며 공부한 내용을 정리해 보았다. 🤔 SOLID 원칙이란? 객체 지향 프로그래밍에서 유지보수와 확장을 쉽게하고, 코드의 유연성 등을 보장하기 위해 만들어진 다섯가지 원칙이다. 이 원칙은 단일 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 치환 원칙(LSP), 인터페이스 분리 원칙(ISP), 의존관계 역전 원칙(DIP)으로 구성된다. 🍏 S 단일 책임 원칙 (SRP, Single Responsibility Principle) 하나의 클래스나 모듈은 하나의 책임만 가져야 한다. SOLID 원칙을 정의한 로버트 마틴은 여기서 '책임'을 단순히 클래스나 모듈이 해야 할 일을 의미하는 것이 아니라,..

[JAVA 자바] 추상클래스의 올바른 사용 방법

오늘 체스 미션 코드리뷰에서 추상 클래스에 대한 피드백을 받아서, 이 내용에 대해 한번 스스로 정리해보고자 한다. 먼저 코드리뷰를 받은 문제의 코드를 보여주겠다. 체스에서 Queen, King, Rook, Pawn, Knight, Bishop이라는 기물들에 대한 클래스를 먼저 작성하였고, 코드를 작성하다보니 코드가 중복되는 부분이 많아서, 중복되는 부분은 모두 체스 기물을 추상화한 Piece라는 추상클래스에 올렸다. public abstract class Piece { protected final Team team; protected final Movement movement; public Piece(Team team, Movement movement) { this.team = team; this.mov..

[JAVA 자바/이펙티브 자바] 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라

스트림에서는 부작용 없는 함수를 사용하라 🐣 부작용이 없다? - 오직 입력만이 결과에 영향을 줘야 한다. - 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 이것을 `순수 함수`라고 부른다. 다음 예시에선, 스트림의 forEach에서 외부의 results를 참조하고, results의 상태를 변경하게 되는 부작용이 발생한다. ArrayList results = new ArrayList(); stream.filter(s -> pattern.matcher(s).matches()) .forEach(s -> results.add(s)); 아래처럼 고치는게 좋다. Listresults = stream.filter(s -> pattern.matcher(s).matches()) .coll..

[JAVA 자바] 람다(lambda)

🐣 람다식 람다식(Lambda expression)은 간단히 말해서 메서드를 하나의 '식(expression)'으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 사라지게 되는데, 그래서 람다식은 익명 함수라고도 한다. 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다. 즉, 람다식으로 인해 메서드를 변수처럼 다룰 수 있다는 뜻이다. 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 람다식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없기 때문에 간결하다. 람다식은 파라미터, 화살표, 바디 세 부분으로 이루..

[JAVA 자바] 스트림(Stream)

🐣 스트림의 정의 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 라 정의할 수 있다. 각 요소에 대해서 부연 설명을 하자면 다음과 같다. 1. 데이터 처리 연산 스트림은 filter, map, reduce, find, match 등의 연산으로 데이터를 조작할 수 있게 한다. 2. 소스 스트림 소스가 될 수 있는 대상으로는 배열, 컬렉션, 임의의 수 등 다양하다. 스트림은 이러한 데이터 제공 소스로부터 데이터를 소비한다. 3. 연속된 요소 데이터 소스는 연속된 요소를 스트림에 제공한다. 연속된의 의미는 순차적으로 값에 접근한다는 뜻이다. 🐣 스트림의 장점 1. 가독성 스트림은 기존의 for문과 if문을 조합해서 코드를 짜는 것보다, 더 간결하고 가독성이 좋다. 이는 스트림이 작업을 ..

[우아한테크코스] 레벨1 - 사다리 타기 미션 정리

아직 사다리 타기 미션이 끝난지 1주일도 지나지 않았기 때문에 회고글을 금방 쓸 수 있을 줄 알았다. 하지만 블랙잭 미션으로 머리가 과부하에 걸렸기 때문에 사다리 타기 미션을 진행할때 했던 생각은 진작 다 휘발되었다. 블로그 이름은 휘발 방지용인데... 그래서 이번에는 회고 대신 받았던 피드백과 새로 알게된 내용에 관련한 정리를 해봤다. 앞으로는 내가 미션을 할 때 무슨 생각으로 했는지 틈틈이 대략적인 메모라도 남겨놔야겠다고 생각했다. 🐣 TDD (Test-Driven-Development) 이번 미션의 주된 학습 주제는 TDD 였다. 테스트 주도 개발이라고 하는건데, 내가 프로덕션 코드를 짜기 전에 실패하는 단위 테스트를 구현해 놓고, 이 테스트가 성공할 정도로만 프로덕션 코드를 짜는 사이클을 반복하는..

[JAVA 자바] equals와 hashcode를 함께 정의해야 하는 이유

두 객체의 주소값이 같다면 두 객체를 물리적으로 같다고 한다. 두 객체가 주소값이 일치하지 않더라도, 두 객체의 필드가 일치하기만 한다면 두 객체가 같다고 판단하는 것은 두 객체는 논리적으로 같다고 한다. 모든 클래스들은 Object 클래스를 상속하는데, Object 클래스에는 equals 메소드가 존재한다. equals를 재정의 하지 않은 상태에서는 두 객체를 비교할 때 물리적 같을 때만 true를 반환한다. 반면 equals를 오버라이딩으로 재정의 해준다면 두 객체가 논리적으로 같을 때도 true를 반환하게 된다. 인텔리제이의 Generate 단축키(윈도우 기준 alt + insert)를 사용하면, 인텔리제이는 eqauls와 hashcode를 한번에 재정의하게 한다. 인텔리제이는 괜한 짓을 하지 않는..

1 2 3 4 5 6 7 8