본문 바로가기
  • soobinhand의 기술 블로그
728x90

soobinhand119

[JAVA] 추상클래스와 인터페이스의 차이 나는 이 차이점을 두고 항상 생각했다. 왜 이렇게 머릿속에 들어가질 않지...? 면접에서도 많이 나오고 또 실제로 자바로 개발을 할 때에 꼭 알아둬야 할 것 같아서 이렇게 공부를 정리해본다. 처음 자바를 접할 때만 해도 이 둘의 차이가 뭐 그렇게 중요하겠어 라는 상당히 거만한 생각을 한 적이 있다. 그 때 해 놓을 걸. 추상 클래스 사실 추상 클래스는 일반 클래스와 별로 다를게 없다. 단지, 추상 메소드를 선언하고 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스다. 유도 클래스다... 그래서 보통 미완성 설계도라고 한다. abstract class soobinhand{ public abstract void soobin(); } 이런식으로 구현한다. 어렵지 않다. 그냥 abstract만 붙여주면 .. 2022. 1. 26.
[네트워크] POST과 PUT차이 / PUT과 PATCH 차이 사실 생각해보면 비슷한 느낌이 강하다. 그러게 왜 따로 쓰지 이걸...? 하는 생각에 공부를 시작했다. POST와 PUT 멱등성과 관련하여 POST와 PUT을 구분하기 위해서는 멱등성의 개념을 알아야 한다. 멱등성은 200억번 수행해도 결과가 같음을 의미한다. HTTP Method에서 GET, PUT, DELETE는 같은 경로로 여러 번 호출해도 결과가 같다. 그러니 멱등적이다. 하지만 POST는 매 호출마다 새로운 데이터가 추가된다. 따라서, POST 연산은 결과가 멱등성을 지키지 않지만, PUT은 반복 수행해도 그 결과가 멱등적이다. POST로 동일한 엔티티의 요청을 N번 보내면 N개의 다른 리소스들이 생성되는 것이다. PUT으로 동일한 요청을 재시도 하더라도 동일한 결과 값을 받는다. 하지만 애초에.. 2022. 1. 26.
아이템 6 - 불필요한 객체 생성을 피하라. String.matches는 정규표현식으로 문자열 형태를 확인하는 가장 쉬운 방법이지만, 성능이 중요한 상황에서 반복해 사용하기엔 적합하지 않다. 성능을 개선하려면 필요한 정규표현식을 표현하는 Pattern 인스턴스를 클래스 초기화 과정에서 직접 생성해 캐싱해두고, 나중에 메소드가 호출될 때마다 이 인스턴스를 재사용한다. 불필요한 객체를 만들어내는 또 다른 예시는 오토박싱을 들 수 있다. 오토박싱은 프로그래머가 기본 타입과 박싱된 기본 타입을 섞어 쓸 때 자동으로 상호 변환해주는 기술이다. 오토박싱은 기본 타입과 그에 대응하는 박싱된 기본 타입의 구분을 흐려주지만, 완전히 없애주는 것은 아니다. 박싱된 기본 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자. 관련 코드 h.. 2022. 1. 26.
아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라. 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 대신 클래스가 여러 자원 인스턴스를 지원해야 하며, 클라이언트가 원하는 자원을 사용해야 한다. 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이 좋다. 핵심 정리 클래스가 내부적으로 하나 이상의 자원에 의존하고 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안 된다. 대신 필요한 자원을 생성자에 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성 테스트 용이성을 기막히게 개선해준다. 관련 코드 https://github.com/Soobinhand/effective_java/tree.. 2022. 1. 26.
728x90