분류 전체보기
-
[Refactoring] 7장 : 캡슐화책/Refactoring 2판 2024. 2. 14. 11:31
레코드 캡슐화하기 // before someRecord = {name: "choijaewon", country: "korea"}; // after class SomeRecord { constructor (data) { this._name = data.name; this._country = data.country; } get name() { return this._name; } set name(arg) { this._name = arg; } get country() { return this._country; } set country(arg) { this._country = arg; } } 레코드를 직접 노출하는 것이 아닌 클래스로 감싸고, 접근자 메서드를 통해 접근 및 수정할 수 있도록 바꾼다. 컬렉션 캡..
-
[Refactoring] 6장 : 기본적인 리팩터링책/Refactoring 2판 2024. 2. 14. 11:24
1. 함수 추출하기 function print() { printBanner(); let someVar = calculate(); // print detail console.log("something 1"); console.log("something 2"); } // after function print() { printBanner(); let someVar = calculate(); printDetail(); function printDetail() { console.log("something 1"); console.log("something 2"); } } 말 그대로 함수 추출하기 2. 함수 인라인하기 function func() { return someFunc1(); } function someFun..
-
[Refactoring] 3장 : 코드에서 나는 악취책/Refactoring 2판 2024. 2. 14. 11:22
기이한 이름 함수, 변수, 클래스 등은 이름만 보고도 무슨 일을 할지 알 정도로 잘 써야 한다. 함수 선언 바꾸기, 변수 이름 바꾸기, 필드 이름 바꾸기 중복 코드 코드가 여러 군데에 똑같은게 있다면 하나로 통합하자 두 메서드가 똑같은 표현식 사용 → 함수 추출하기 를 통해 양쪽 모두 추출한 메서드를 호출하도록 비슷한 표현식 → 문장 슬라이드하기 를 통해 비슷한 부분을 한 곳에 모아 함수 추출 서브 클래스들에 코드 중복 → 메서드 올리기 를 적용하여 부모로 옮김 긴 함수 함수는 잘게 쪼개는 것이 좋다 ← 이때 주의할 점은 함수의 이름이 반드시 명확해야 함 함수 내부의 코드의 목적을 분명하게 나타내줘야함 그래야만 함수를 잘게 쪼개는 의미가 있다. 함수 추출하기 임시 변수 줄이기 - 임시 변수를 질의 함수로..
-
[Effective Java] 10장 : 예외책/Effective Java 3판 2024. 2. 14. 01:08
아이템 69 - 예외는 진짜 예외 상황에만 사용하라 예외는 예외 상황에 쓸 목적이므로 JVM에서 그렇게 빠르게 처리해주지 않음 예외를 흐름 제어용으로 사용하지 말자 API는 클라이언트가 정상 제어 흐름에서 예외를 사용할 일이 없어야함 아이템 70 - 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 문제 상황 : 검사 예외, 런타입 예외, 에러 검사 예외는 호출하는 쪽에서 복구하리라 여겨지는 상황에 사용 → 복구 가능 런타임 예외는 프로그래밍 오류를 나타낼 때 사용 → 복구 불가능 우리가 구현하는 비검사 throwable은 모두 RuntimeException의 하위 클래스여야함 Error 클래스를 상속해 하위 클래스를 만들지 말자 확실하지 않으면 그냥 비검사 예외라고 보자..
-
[Effective Java] 8장 : 메서드책/Effective Java 3판 2024. 2. 14. 00:55
아이템 49 - 매개변수가 유효한지 검사하라 함수의 맨 처음에 가급적 매개변수의 유효성을 검사하는 것이 좋다 → null 체크, index 음수 체크 등 중간 계산 과정에서 자연스럽게 나오는 것은 굳이 할 필요는 없다. public, protected 메서드는 매개변수가 잘못됐을 때 던지는 예외를 문서화해야함 → @throws 아이템 50 - 적시에 방어적 복사본을 만들라 final class Period { private final Date start; private final Date end; public Period(Date start, Date end) { if (start.compareTo(end) > 0) { throw new IllegalArgumentException(); } this.st..
-
[Effective Java] 4장 : 클래스와 인터페이스책/Effective Java 3판 2024. 2. 14. 00:19
아이템 15 - 클래스와 멤버의 접근 권한을 최소화해라 정보 은닉은 장점이 많다. 접근 제한자 (private, protected, public)를 제대로 활용하는 것이 정보 은닉의 핵심 기본 원칙 : 모든 클래스와 멤버의 접근성을 가능한 한 좁혀야 한다. 톱레벨 클래스와 인터페이스에 부여할 수 있는 접근 수준 - package-private, public public : 공개 API가 됨, package-private : 해당 패키지 안에서만 이용 패키지 외부에서 쓸 이유가 없다면 package-private으로 → public으로 두면 API가 되므로 하위 호환을 위해 영원히 관리해줘야함 한 클래스에서만 사용하는 package-private 톱레벨 클래스나 인터페이스 → 사용하는 클래스 안에 priv..
-
[Effective Java] 2장 : 객체 생성과 파괴책/Effective Java 3판 2024. 2. 13. 23:27
아이템 1 - 생성자 대신 정적 팩토리 메서드를 고려하라 장점 이름을 가질 수 있음 호출될 때마다 인스턴스를 생성하지 않아도 됨 반환 타입의 하위 타입 객체를 반환할 수 있음 입력 매개변수에 따라 다른 클래스를 반환할 수 있음 정적 팩토리 메서드를 작성하는 시점에 반환할 객체의 클래스가 존재하지 않아도 됨 단점 상속 불가능 프로그래머가 찾기 어려움 public static void main(String[] args) { MyClass myClass = MyClass.getInstance(); MyClass myClass1 = MyClass.getInstance(); myClass.print("hello world"); myClass1.print("sdfsdf"); System.out.println(myC..
-
프로그래머스 - N-Queen [Java]문제 풀이/프로그래머스 2024. 2. 12. 15:23
이 문제는 완전 탐색을 이용해서 풀었다. 처음에는 정말 온전히 완전 탐색을 이용해서 구현했다. 하지만 정답은 나오나 시간 초과가 떴다. 조금만 생각해보면 시간을 완전히 줄일 수 있다. N * N 체스판에 N개의 퀸을 놓는다. 퀸은 가로, 세로, 대각선 전체를 이동할 수 있기 때문에, N * N 체스판에 N개의 퀸을 놓으려면 모든 행에 하나씩 퀸이 있는 모습일 것이다. 이 점을 이용하면 시간을 굉장히 많이 줄일 수 있다. class Solution { int N; int[][] board; int[] dy = {-1, -1, 0, 1, 1, 1, 0, -1}; int[] dx = {0, -1, -1, -1, 0, 1, 1, 1}; public int solution(int n) { N = n; board ..