본문 바로가기

전체 글160

[effective java] item 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 결론 public 클래스는 절대 가변 필드를 직접 노출하면 안 된다. 불변 필드라면 노출해도 덜 위험하지만 안심할 수는 없다. 하지만, package-private 클래스나 private 중첩 클래스는 종종 (불변이든 가변이든) 필드를 노출하는 편이 나을 때도 있다. 설명 데이터 필드에 직접 접근할 때의 단점 내부 표현을 바꾸기 위해선 API를 수정해야 합니다. 불변식을 보장할 수 없습니다. 외부에서 필드에 접근할 때, 부수 작업을 수행할 수 없습니다. 따라서 필드를 모두 private으로 바꾸고 public 접근자 (getter)를 추가합니다. public 클래스라면 반드시 이 방식을 사용해야 합니다. 접근자와 변경자 메서드를 활용해 데이터를 캡슐화한다. (p. 102) public class Circ.. 2023. 8. 7.
[effective java] item 15. 클래스와 멤버의 접근 권한을 최소화하라 결론 프로그램 요소의 접근성은 가능한 한 최소한으로 하라. 꼭 필요한 것만 골라 최소한의 public API를 설계하자. 그 외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개되는 일이 없도록 해야 한다. public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안 된다. 단, public static final 필드가 참조하는 객체가 불변인지 확인해야 한다. 설명 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리합니다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리입니다. 자바는 접근 제한자(private, protected, public)를 제공하고 이것을 제대로 활용하.. 2023. 8. 7.
[프로그래머스] 풍선 터트리기 - JAVA 🔗 문제 👨🏻‍💻 풀이 및 코드 이 문제의 핵심은 번호가 작은 풍선은 1번만 터트릴 수 있기 때문에, 현재 풍선을 기준으로 왼쪽에 인접한 풍선과 오른쪽에 인접한 풍선 모두 현재 풍선보다 번호가 작은 풍선이 있다면 현재 풍선은 끝까지 살아남을 수 없습니다. 이 원칙을 사용한 구현 방법은 현재 인덱스를 기준으로 왼쪽 풍선들 중 가장 작은 번호의 풍선 번호를 구하고, 오른쪽 풍선들 중 가장 작은 번호를 구합니다. 가장 작은 번호를 구하는 이유는 큰 풍선들만 터트렸을 때 가장 작은 번호만 남게 되기 때문입니다. 예제 2) 주어진 배열 0 1 2 3 4 5 6 7 8 9 -16 27 65 -2 58 -92 -71 -68 -61 -33 현재 인덱스를 기준으로 왼쪽 풍선들 중 가장 작은 번호 0 1 2 3 4 5 6.. 2023. 8. 4.
[Servlet] 서블릿과 WAS의 역할, 멀티 스레드 목차 서론 간략하게 서블릿과 WAS의 역할과 멀티 스레드에 대해 작성하는 글입니다. 서블릿과 WAS의 역할 HTML Form 으로 데이터를 전송 HTML Form을 사용하여 데이터를 서버로 전송하면 어떻게 동작할까요? POST로 사용자의 정보를 저장하는 요청을 보내면, 브라우저는 그에 맞는 HTTP 요청 메시지를 생성해 서버에게 전송합니다. 서버에서 처리 : 웹 애플리케이션 서버를 직접 구현한다면? TCP/IP 연결을 대기하는 코드를 작성하고, 소켓을 연결한다. 받은 HTTP 요청 메시지는 모두 텍스트다. 파싱해서 해석한다. POST 방식인지, 어떤 URL로 요청이 왔는지(/save) 확인한다. Content-Type에 따라 Body를 파싱한다. (usernamge, age 데이터를 사용할 수 있도록 파.. 2023. 8. 3.
[Spring] 웹 서버, 웹 애플리케이션 서버, 웹 시스템 구성 목차 웹 서버(Web Server) HTTP 기반으로 동작합니다. 정적인 리소스를 제공합니다. (정적 리소스: 정적(파일) HTML, CSS, JS, 이미지, 영상) 기타 부가 기능을 제공합니다. 예) NGINX, APACHE 가 있습니다. 웹 애플리케이션 서버 (WAS - Web Application Server) HTTP 기반으로 동작합니다. 웹 서버 기능을 포함합니다. (정적 리소스 제공 가능) 웹 서버와의 차이점은 프로그램 코드를 실행해서 애플리케이션 로직을 수행합니다. (프로그래밍을 할 수 있기 때문) 동적 HTML, HTTP API (JSON) 제공 동적 HTML: 사용자에 따라 다르게 이름이나 프로필 이미지 등을 바꿔 보여줄 수 있습니다. 서블릿, JSP, 스프링 MVC는 WAS에서 동작합니.. 2023. 8. 3.
[effective java] item 14. Comparable을 구현할지 고려하라 결론 순서를 고려해야 하는 값 클래스를 작성한다면 꼭 Comparable 인터페이스를 구현하여, 그 인스턴스들을 쉽게 정렬하고, 검색하고, 비교 기능을 제공하는 컬렉션과 어우러지도록 해야 한다. compareTo 메서드에서 필드의 값을 비교할 때 연산자는 쓰지 말아야 한다. '값의 차'를 기준으로 하는 Comparator도 좋지 않다. 그 대신 박싱된 기본 타입 클래스가 제공하는 정적 compare 메서드나 Comparator 인터페이스가 제공하는 비교자 생성 메서드를 사용하자. 정적 compare 메서드를 활용한 Comparator static Comparator hashCodeOrder = new Comparator() { public int compare(Object o1, Object .. 2023. 8. 1.