TIL
-
-
0726TIL 2024. 7. 27. 21:46
빅오 표기법정확한 표현을 하기 위한 것이 아니라 대략적인 추세를 보기 위한 것추세를 보기 위한 것이므로 상수는 추세에 영향을 제네릭와일드카드와일드 카드는 제네릭 타입이나 제네릭 메서드를 선언하는 것이 아니다. 와일드 카드는 이미 만들어진 제네릭 타입을 활용할 때 사용하는 것이다. 와일드 카드의 ?는 무엇이든 다 상속받을 수 있다는 의미. 상한선이 없다는 의미=> 를 의미한다. 제네릭 vs 와일드 카드 와일드카드의 한계와일드 카드는 일반 메소드다. 즉, 매개변수로 들어오는 값만 제한없이 받는 것이지. return 타입은 결정 동적으로 결정할 수 없다. 이 경우 반환된 타입을 캐스팅 해야하는 상황이 발생할 수 있다. 제네릭의 경우는 반환타입, 매개변수 타입, 인스턴스 변수 타입 등을 동적으로 선언할 수 있..
-
0725TIL 2024. 7. 26. 00:55
불변객체불변객체란? 한번 값이 정해지면 바꿀 수 없는 객체 왜 쓸까?자바의 참조 자료형은 기본적으로 공유자원이다. 이 말은 같은 객체를 여러 변수가 참조 할 수 있다는 것. 이는 개발자가 의도하지 않은 사이드 이팩트를 만들어 내기도 한다. 해결을 위해서는 변수에 값을 복사하지 말고, 새로운 객체를 계속 생성하는 방법이 있다. 불변객체 선언 방법final 키워드를 사용한다. 객체 내부 인스턴스 변수를 final 키워드로 선언하면, 상수가 되어 초기화 시 한번만 값이 변경 가능하고 그 이후에는 불가능하다. 즉, setter가 필요 없는 것이다.(어차피 못 바꾸므로..) 개발자가 불변객체에 setter를 이용하여 값 변경을 시도 할 때 인텔리제이와 같은 IDE 툴에서는 에러를 일으키고 이것을 보고 불변 객체임..
-
0724TIL 2024. 7. 24. 23:15
제네릭 메서드메서드를 호출하는 시점에 타입 인자를 전달해서 타입을 지정하는 것. 따라서 타입을 지정하면서 메서드를 호출 제네릭 타입은 static 메서드에서 사용 할 수 없다제네릭 타입은 객체 생성 시 그 타입이 결정된다. static 메소드는 함수 프로그램 시작 시 만들어 진다.(인스턴스 단위가 아니라 클래스 단위이다). 즉, 타입이 정해지기 전에 만들어져야 하므로 사용 할 수 없다. 해결 방법은?제네릭 메서드를 사용한다. 제네릭 타입과 제네릭 메서드의 우선순위-> 제네릭 메서드가 우선순위를 가짐 왜?제네릭 타입은 클래스 레벨에서 걸림제네릭 메서드는 메서드 단위제네릭 메서드가 타입 매개변수와 위치가 더 가까움 -> 우선순위를 가짐 SET정의 : 세트(셋)은 유일한 요소들의 컬렉션. 특징1) 유일성: 중..
-
0723TIL 2024. 7. 24. 00:12
제네릭이란제네릭이라는 단어는 일반적인, 범용적인이라는 영어 단어 뜻이다. 풀어보면 특정 타입에 속한 것이 아니라 일반적으로, 범용적으로 사용할 수 있다는 뜻이다. 제네릭 왜 씀?객체의 명만 다르고 내부 동작이 거의 비슷한 두개의 클래스가 있다고 생각해보자. 개와 고양이는 울음소리가 다를 뿐 운다, 달린다, 먹는다 등의 공통 기능을 가지고 있다. 클래스 마다 메소드를 정의하면 중복되는 코드가 많이 발생하여 비효율 적일 것이다.이를 해결하기 위해 다형성을 활용해보자개와 고양이의 부모인 동물 클래스를 만들고 이를 상속받도록 하자. 이제 부모 클래스에 공통 메소드를 정의하면 코드의 중복은 해결되지만 안정성의 문제가 발생한다. 이를 모두 해결하기 위해 등장한 것이 제네릭이다. 매개변수와 인자매개변수는 메소드 뒤에..
-
0722TIL 2024. 7. 23. 01:39
데몬 스레드와 사용자 스레드사용자 스레드 : 우선순위가 높은 스레드로. main() 이 해당. main에서 호출한 스레드도 모두 사용자 스레드이다. 상속에 의해서. 이 사용자 스레드 들이 모두 종료되면 JVM이 종료되며 프로그램이 끝난다. 데몬 스레드 : 우선수위가 낮은 스레드로 보조 스레드 개념. 가비지 컬렉터가 대표적 예시. 사용자 스레드와 달리 JVM이 실행이 끝날때까지 기다려주지 않는다. 사용자 스레드가 끝나면 함께 종료 왜 사용하나?프로그램 실행 중 비교적 중요도가 떨어지는 프로그램을 실행하기 위해서. 백그라운드에서 실행되며 주 스레드가 종료 될 때 자동으로 종료되기 때문에 사용자가 직접 관리하지 않아도 된다. 자동저장, 가비지 컬렉션, 사용자 모니터링이 이에 해당한다. runnable vs t..