본문 바로가기

JAVA6

[JAVA] TDD란? 0. 이 글을 쓰게된 이유 우아한테크코스 레벨1을 거치며 tdd에 대해서 배우고 적용하며 학습했다. tdd를 직접 적용해보며 느꼈던 장점과 단점, tdd에 대한 설명을 통한 메타인지 효과를 얻고자 이 글을 쓰게 되었다. 1. tdd란? tdd는 소프트웨어 개발 방법론 중 하나로, 테스트를 먼저 작성한 후 그에 맞는 프로덕션 코드를 작성하는 개발 방법론이다. tdd의 핵심은 테스트 코드를 먼저 작성하는 것이다. 이는 개발자가 자신이 작성한 코드에 대해서 빠르게 테스트하면서 안정적이고 예측 가능한 코드를 만들 수 있게해준다. 2. tdd의 장점 tdd를 사용하면 어떤 장점이 있을까? 내가 직접 느낀 장점은 다음과 같다. 2.1 코드 품질 향상 tdd를 적용하게되면 테스트 코드를 먼저 작성하고 테스트에 통과하.. 2023. 4. 9.
[JAVA] 불변 클래스 0. 이 글을 쓰게 된 이유 개발을 할 때 수도 없이 클래스는 웬만하면 불변 클래스로 만들라는 소리를 들었다. 나름의 이유들을 들었는데 명확하게 공감되지 않았다. 도대체 왜 불변 클래스로 만들어야하는가에 대한 명확한 이유를 알기위해 이 글을 쓰게 되었다. 1. 불변 클래스란? 이펙티브 자바에서 불변 클래스란 그 인스턴스 내부 값을 수정할 수 없는 클래스라고 만한다. 즉, 해당 인스턴스가 가지고있는 정보들을 수정할 수 없도록 만들어 변하지 않게 하는 클래스이다. 2. 왜 불변 클래스를 사용해야할까? 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉽고, 오류가 생길 여지도 적고 훨씬 안전하다고 한다. 왜 그럴까? 2.1 불변 클래스는 그 자체로 실패 원자성을 제공한다. 실패 원자성이란 메서드에서 .. 2023. 3. 24.
[Java] 객체 지향 vs 성능 0. 이 글을 쓰는 이유 페어 프로그래밍을 하던 중 페어와 성능에 대한 의견이 충돌한 적이 있었다. 객체 지향적으로 코드를 짜다보면 성능이 완벽하지 않은 코드가 생기는 경우가 많다. 예를 들어, for문 하나에서 A, B 둘 다 처리할 수 있는데 역할에 따라 객체를 분리하다보면 각각 for문을 도는 경우가 생긴다. 이럴 경우 어떤 것을 선택하는 것이 맞을까? 1. 객체 지향의 목적 우리는 자바를 비롯한 객체 지향 언어들을 왜 사용할까? 단순히 기능을 구현하기 위해서라면 사실 어떤 언어든 상관없다. 하지만 우리가 객체 지향 언어를 사용하는 이유 중 가장 큰 이유는 유지보수 하기 쉬운 코드를 짜기 위함이다. 유지 보수하기 좋은 코드(객체 지향적인 코드)는 누구든 이해할 수 있게 책임과 역할이 잘 분리되어있음.. 2023. 3. 9.
[JAVA] 객체 안의 public api 선정 기준 0. 이 글을 쓰게된 이유 우테코에서 사다리 미션을 하며 객체의 생성자에 있는 private method를 public api로 열어서 활용하는 것이 어떠냐는 피드백을 받았다. 개인적으로는 그 객체가 그 메소드가 호출되지 않는다면 의미가 없는 객체라고 생각해서 반박(?)을 했는데 다시 리뷰어가 public method로 열어둠으로써 얻는 이점과 private을 했을 때의 단점에 대해 설명 해주셨고 완벽하게 설득 당했다. 그 내용을 공유해보면 다음과 같다. 비즈니스 로직을 파악하기 쉽다. 보통 api 사용자들은 private mathod로 정의 해놓으면 필요하지 않는 이상(오류가 나지 않는 이상) 그 메소드를 잘 읽지 않는다. 하지만 public method는 그 메소드를 사용하려면 (적어도 메소드 명이라.. 2023. 2. 28.
[JAVA] Reflection 0. 이 글을 쓰게 된 이유 Spring을 학습 하다보니 자바의 리플렉션을 접하게 되었다. 리플렉션에 대해서 자세하게는 모르는 상태였어서 이번에 새로 학습하게 된 리플렉션에 대해서 정리 해보려고 한다. 1. Java Reflection API란? 구체적인 클래스 타입을 알지 못해도 그 클래스의 정보에 접근 및 조작할 수 있게 하는 API 일반적인 상황이라면 잘 이해가 안되는 정의이다. 자바에서는 구체적인 클래스가 무엇인지 알아야지 그에 대한 메서드, 타입, 변수 등에 접근할 수 있다. 하지만 reflection은 구체적인 클래스 없이도 그에 대한 정보를 모두 가져오고 심지어 조작까지 할 수 있다고 한다. 이게 무슨 뜻인지 예시를 통해 알아보자. 2. 예시 다음과 같은 Pizza 클래스가 있다고 하자. p.. 2022. 10. 6.
[JAVA] equals와 hashcode hashCode() hashCode()는 객체의 해시코드를 반환하는 메서드이다. Object클래스의 hashCode()는 객체의 주소를 int 형으로 변환해서 반환한다. 그래서 객체마다 다른 값을 가지게 된다. Object 클래스의 hashCode() 실제 코드를 살펴보자. public class Object { ... public native int hashCode(); } native 키워드가 붙어있는데 이는 이 메서드가 OS의 메서드(C, C++, 어셈블리어로 작성됨)를 호출해서 사용한다는 뜻이다. 즉, native 키워드를 붙이면 OS가 가지고 있는 메서드를 마치 자바가 가지고 있는 것처럼 호출해서 사용할 수 있다는 것이다.(이를 JNI라고 한다. JNI는 자바와 자바가 아닌 언어가 서로 호출해서.. 2022. 9. 28.