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

전체 글119

[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.
아이템 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라. 하위 클래스를 만들어 인스턴스화하면 그만이기 때문에 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때 뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 이렇게 하면 하위 클래스가 상위 클래스의 생성자에 접근할 길이 막혀버린다. 관련 코드 https://github.com/Soobinhand/effective_java/tree/master/src/Item_4 GitHub - Soobinhand/effective_java: 이펙티브 자바 이펙티브 자바. Contribute to Soobinhand/effective_java development by creating an account on GitHub... 2022. 1. 26.
[네트워크] GET과 POST 차이 우선 둘 다 HTTP 메소드로 클라이언트에서 서버로 무언가를 요청할 때 사용된다. GET 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메소드다. 예를 들면 게시판의 게시물 조회. GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며 이 부분이 쿼리 스트링이다. 방식은 URL 끝에 ? 를 붙이고 그 다음 형식에 맞게 이어 붙이면 된다. www.soobinhand.com/show?name = value 이런 형식이다. GET 요청은 캐시가 가능하다. GET은 브라우저 기록에 남음. 북마크 추가 가능. 데이터 길이에 제한. 멱등법칙이 성립함. POST 리소스를 생성 및 수정하기 위해 서버에 데이터를 보내는 데 사용함. 보안이 GET보다는 좋음. GET과 달리 전송해야할.. 2022. 1. 25.
아이템 3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라. 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 싱글턴을 만드는 방식은 보통 둘 중 하나다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련한다. 가장 바람직한 방법은 열거 타입 방식의 싱글턴이다. public 필드 방식과 비슷하지만, 더 간결하고, 추가 노력 없이 직렬화가 가능하고 심지어 아주 복잡한 직렬화 상황이나 리플렉션 공격에서도 제2의 인스턴스가 생기는 일을 완벽히 막아준다. 대부분 상황에서는 원소가 하나뿐인 열거 타입이 싱글턴을 만드는 가장 좋은 방법이다. 관련 코드 https://github.com/.. 2022. 1. 25.
아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라. 정적 메소드와 생성자는 선택적 매개변수가 많을 경우 적절히 대응하기 어렵다. 점층적 생성자 패턴도 쓸 수는 있지만, 매개변수 갯수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다. 매개변수가 많을 때 활용할 수 있는 두 번째 대안은 자바빈즈 패턴이다. 매개변수가 없는 생성자로 객체를 만든 후, 세터 메서드들을 호출해 원하는 매개변수의 값을 설정하는 방식이다. 점층적 생성자 패턴의 단점들이 자바빈즈 패턴에서는 더 이상 보이지 않는다. 코드가 길어지긴 했지만 인스턴스를 만들기 쉽고, 그 결과 더 읽기 쉬운 코드가 되었다. 하지만 자바빈즈는 심각한 단점이 있음. 자바빈즈 패턴에서는 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성이 무너진 상태에 놓이게 된다. .. 2022. 1. 25.
아이템 1 - 생성자 대신 정적 팩토리 메소드를 고려하라. 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 하지만 다른 이유로 생성자보다는 정적 메소드를 사용하는 경우가 좋을 때가 있다. 물론 단점도 있음. 암튼 장단점을 알아보자. 우선 장점이다. 첫 번째 장점 : 이름을 가질 수 있다. 우선 생성자는 반환될 객체의 특성을 아주 제대로 설명하지 못할 수도 있다. 반면 정적 메소드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 생성자의 매개변수들의 형식들을 바꿔가며 추가하는 것은 그렇게 좋은 생각이 아니다. 왜냐하면 아무리 기억력이 좋다한들, 모든 생성자를 외울 수 없기 때문이다. 하지만 이름을 가질 수 있는 정적 메소드에는 이런 제약이 없다. 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를.. 2022. 1. 24.
[네트워크] HTTP와 HTTPS의 차이 HTTP와 HTTPS의 차이 개요 HTTP는 다시 한 번 공부하자면 인터넷 상에서 데이터 통신을 위한 프로토콜이다. 또 서버/클라이언트 모델을 따르고 있다. 그럼 HTTPS는 무엇일까? Hyper Text Transfer Protocol까지는 맞을 것 같은데 과연 S는 무엇일까? HTTPS Hyper Text Transfer Protocol Secure의 약자이다. 안전하게 해준다는 뜻같다. 클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 SSL이나 TLS를 사용한다. 이 커넥션은 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다. 쉽게 얘기하면, 그냥 HTTP보다 안전하게 데이터 통신이 가능하다는 뜻이다. 차이점 HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약하다. HT.. 2022. 1. 22.
728x90