전체 글
-
아이템 27. 비검사 경고를 제거하라Java/이펙티브 자바 2023. 9. 21. 10:30
핵심 정리 - "비검사 (unchecked) 경고" 란? ㆍ컴파일러가 타입 안정성을 확인하는데 필요한 정보가 충분치 않을 때 발생시키는 경고 public static void main(String[] args) { Set names = new HashSet(); Set strings = new HashSet(); } - 할 수 있는 한 모든 비검사 경고를 제거하라. - 경고를 제거할 수 없지만 안전하다고 확신한다면 @SuppressWarnings("unchecked") 애노테이션을 달아 경고를 숨기자 - @SuppressWarnings 애노테이션은 항상 가능한 한 좁은 범위에 적용하자. - @SuppressWarnings("unchecked") 애노테이션을 사용할 때면 그 경고를 무시해도 안전한 이유를 ..
-
아이템26. 로 타입은 사용하지 말라.Java/이펙티브 자바 2023. 9. 18. 13:04
핵심 정리 - 제네릭 용어 정리 - 로 타입 : List - 제네릭 타입 : List - 매개변수화 타입 : List - 타입 매개변수 : E - 실제 타입 매개변수 : String - 한정적 타입 매개변수 : List - 비한정적 와일드카드 타입 : Class ㆍ아무런 타입이나 다 받는다. - 한정적 와일드카드 타입 : Class의 차이는? ㆍ 한종류를 다루는 Set ㆍ와일드 카드 시 add라는 함수로 값을 넣을 수 없다. (null은 가능) -> 안전성 확보 public class Numbers { static int numElementsInCommon(Set s1, Set s2) { // 해당 컬렉션에 아무거나 넣을 수 있다. int result = 0; for (Object o1 : s1) { i..
-
코테 정리 및 공부algorithm/이것이 취업을 위한 코딩테스트다 2023. 9. 11. 16:56
기본 문법 - 진수 & 알파벳과 정수 # 16진수 변환 int(a, 16) # 알파벳의 정수값 ord(x) # 정수의 알파벳 값 chr(x) - 반올림 값 print( format(x, ".2f") ) - 최대공약수와 최소공배수 import math # 최대공약수 math.gcd(a,b) # 최소공배수 (a * b) // math.gcd(a,b) - i 부터 j 까지의 원소를 역순으로 변경 my_list[i:j+1] = reversed(my_list[i:j+1]) - exception 처리 try: # ... except: # ... - 삼항 (true logic) if (조건문) else (false logic) - replace 키워드 ( 재저장해야한다 ) # 공백제거 replaced_a = a.re..
-
아이템 22 & 아이템 23 & 아이템 24 & 아이템 25Java/이펙티브 자바 2023. 9. 7. 11:02
아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라. 핵심 정리 - 상수를 정의하는 용도로 인터페이스를 사용하지 말 것! ㆍ클래스 내부에서 사용할 상수는 내부 구현에 해당한다. ㆍ내부 구현을 클래스의 API로 노출하는 행위가 된다. ㆍ클라이언트에 혼란을 준다. public class MyClass implements PhysicalConstants{ public static void main(String[] args) { System.out.println(PhysicalConstants.ELECTRON_MASS); System.out.println(BOLTZMANN_CONTANT); // 상속 시 위와 같이 사용 가능 - 인터페이스의 의도(타입 정의) 오염 } } - 상수를 정의하는 방법 ㆍ특정..
-
아이템21. 인터페이스는 구현하는 쪽에서 생각해 설계하라.Java/이펙티브 자바 2023. 9. 5. 11:32
핵심 정리 - 기존 인터페이스에 디폴트 메서드 구현을 추가하는 것은 위험한 일이다. ▷ ex) collection의 removeIf - synchronized 관련한 코드가 없기에 멀티쓰레드 환경에서 안전 X ㆍ디폴트 메서드는 구현 클래스에 대해 아무것도 모른 채 합의 없이 무작정 "삽입" 될 뿐이다. ㆍ디폴트 메서드는 기존 구현체에 런타임 오류를 일으킬 수 있다. public class SubClass extends SuperClass implements MarketInterface { public static void main(String[] args) { SubClass subClass = new SubClass(); subClass.hello(); // SuperClass의 hello는 priva..
-
아이템20. 추상 클래스보다 인터페이스를 우선하라.Java/이펙티브 자바 2023. 8. 31. 11:51
핵심 정리 - 인터페이스의 장점 - 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다. (완벽 공략 3) public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day, int month, int year, int hour, int minute, int second); LocalDateTime getLocalDateTime(); static ZoneId getZonedId(String zoneString) { try { return ZoneId.of(zoneString); } catch (Dat..
-
아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라.Java/이펙티브 자바 2023. 8. 30. 12:57
핵심 정리 - 상속용 클래스는 내부 구현을 문서로 남겨야 한다. ㆍ@implSpec 을 사용할 수 있다. javadoc -d 경로 -tag "implSpec:a:Implementation Reqirements:" - 내부 동작 중간에 끼어들 수 있는 훅(hook)을 잘 선별하여 protected 메서드로 공개해야 한다. - 상속용으로 설계한 클래스는 배포 전에 반드시 하위 클래스를 만들어 검증해야 한다. - 상속용 클래스의 생성자는 재정의 가능한 메서드를 호출해서는 안된다. ㆍCloneable(아이템 13)과 Serializable(아이템 86)을 구현할 때 조심해야 한다. - 상속용으로 설계한 클래스가 아니라면 상속을 금지한다. ㆍfinal 클래스 또는 private 생성자
-
파이썬 문법algorithm/이것이 취업을 위한 코딩테스트다 2023. 8. 24. 14:35
리스트 컴프리헨션 # 0부터 9까지의 수를 포함하는 리스트 array = [i for i in range(10)] # 0부터 19까지의 수 중에서 홀수만 포함하는 리스트 array = [i for i in range(20) if i % 2 == 1] # 1부터 9까지의 수들의 제곱 값을 포함하는 리스트 array = [i * i for i in range(1, 10)] so-리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다. - 특히 N x M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용하다. ㆍ좋은 예시 : array = [[0] * m for _ in range(n)] - 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않은 결과가 나올 수 있..