반응형 All205 [이펙티브자바 3판] ITEM17. 변경 가능성을 최소화하라 이번장의 핵심은... Getter가 있다고 무조건 Setter를 만들지 말자 클래스는 꼭 필요한 경우가 아니라면 불변이어야 한다 불변으로 만들 수 없는 클래스라도 변경할 수 있는 부분을 최소한으로 줄이자 다른 합당한 이유가 없다면 모든 필드는 private final 이어야 한다 생성자는 불변식 설정이 모두 완료된, 초기화가 완벽히 끝난 상태의 객체를 생성해야 한다 확실한 이유가 없다면 생성자와 정적 팩토리 외에는 그 어떤 초기화 메서드도 public으로 제공해서는 안 된다 객체를 재활용할 목적으로 상태를 다시 초기화하는 메서드도 안 된다 불변 클래스? 불변 클래스란 그 인스턴스 내부 값을 수정할 수 없는 클래스이다 (간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다) 자바 플랫폼 라.. 2020. 9. 19. [Java] Java는 Call by value? Call by reference? 안녕하세요~ 잭코딩입니다! 이번 내용에서는 Call by value와 Call by reference를 살펴보고 Java는 어떠한 방식인지 예제를 통해 알아볼까요? 자바에서 메서드(함수)를 정의한 후 필요한 변수 or 객체를 인자 값으로 받아온다 이때, 인자 값을 어떤 식으로 받아 올 것인지에 대한 방식이다 Call by value (값에 의한 호출) '값'을 넘겨주는 호출 방식 Call by reference (참조에 의한 호출) '참조값(주소 혹은 포인터)을 넘겨주는 호출 방식' 1. 자바의 기본형(Primitive Type)의 경우는 Call by value이다 (기본형 : boolean, char, byte, short, int, long, float, double) public class Mai.. 2020. 9. 18. [이펙티브자바 3판] ITEM16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 이번장의 핵심은... public 클래스는 절대 가변 필드를 직접 노출해서는 안 된다 불변 필드라면 노출해도 덜 위험하지만 완전히 안심할 수는 없다 하지만, package-private 클래스나 private 중첩 클래스에서는 종종 (불변이든 가변이든) 필드를 노출하는 편이 나을 때도 있다 우선 아래의 퇴보한 클래스를 보자 class Point { public double x; public double y; } 왜 퇴보한 클래스인가? 단순히 인스턴스 필드들을 모아놓는 일 외에는 아무 목적이 없는 퇴보한 클래스이다 데이터 필드에 직접 접근할 수 있으니 캡슐화 이점도 없다 API를 수정하지 않고도 내부 표현을 바꿀 수 있고, 불변식을 보장할 수 없다 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다 .. 2020. 9. 18. [이펙티브자바 3판] ITEM15. 클래스와 멤버의 접근 권한을 최소화하라 이번장의 핵심은... 프로그램 요소의 접근성은 가능한 한 최소한으로 하자 꼭 필요한 것만 골라 최소한의 public API를 설계하자 그 외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개되는 일이 없도록 해야 한다 public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드를 가져서는 안 된다 public static final 필드가 참조하는 객체가 불변인지 확인하자 정보 은닉(캡슐화)의 장점 컴포넌트를 서로 독립시켜서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 해 준다 1. 시스템 개발 속도를 높인다 (여러 컴포넌트를 병렬로 개발할 수 있다) 2. 시스템 관리 비용을 낮춘다 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있.. 2020. 9. 16. [Codility(코딜리티)] Lesson7. Nesting (100%) Lesson 7 Stacks and Queues - Nesting (Java Solution) app.codility.com/programmers/lessons/7-stacks_and_queues/nesting/ Nesting coding task - Learn to Code - Codility Determine whether a given string of parentheses (single type) is properly nested. app.codility.com 문제 N개의 문자로 이루어진 String S가 주어진다 S = "(()(())())" 이런 형태로 주어지는데, 모든 문자가 완전하게 ()로 감싸 지면 1 아니면 0이다 예를 들어, S = "(()(())())" 이면, ()로 모두 감싸 져.. 2020. 9. 14. [이펙티브자바 3판] ITEM14. Comparable을 구현할지 고려하라 이번장의 핵심은... 순서를 고려해야 하는 값 클래스를 작성한다면 꼭 Comparable 인터페이스를 구현하여, 그 인터페이스들을 쉽게 정렬하고, 검색하고, 비교 기능을 제공하는 컬렉션과 어우러지도록 해야 한다 compareTo() 메서드에서 필드의 값을 비교할 때, ""연산자는 쓰지 말도록 하자 대신 박싱된 기본 타입 클래스가 제공하는 정적 compare() 메서드나 Comparator 인터페이스가 제공하는 비교자 생성 메서드를 사용하자 Comparable 인터페이스 compareTo()는 Object의 메서드가 아니다 성격은 2가지만 빼면 Object의 equals()와 같다 compareTo()는 단순 동치성 비교에 더해 순서까지 비교할 수 있다 Comparable을 구현했다는 것은 해당 클래스의 .. 2020. 9. 14. [친절한 SQL 튜닝] 1.1 SQL 파싱과 최적화 1. 구조적, 집합적, 선언적 질의 언어 SQL : 'Strucetured Query Language' 말 그대로 구조적 질의 언어이다 오라클 PL/SQL, SQL Server T-SQL처럼 절차적 프로그래밍 기능을 구현할 수 있는 확정 언어도 제공하지만, SQL은 기본적으로 구조적이고 집합적이고 선언적인 질의 언어이다 원하는 결과 집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수밖에 없다 즉, 프로시저가 필요하다 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저이다 (옵티마이저가 프로그래밍을 대신해 주는 셈이다) DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정을 SQL 최적화라고 한다 2 SQL 최적화 세부적인 처.. 2020. 9. 13. 이전 1 ··· 22 23 24 25 26 27 28 ··· 30 다음 반응형