본문 바로가기
728x90

전체 글249

final 키워드를 사용하면 좋은 점. 변경 불가능성: final 변수는 값을 한번 할당하면 변경이 불가능해집니다. 이로 인해 의도치 않은 값의 변경이나 버그를 방지할 수 있습니다. 안전한 다중 스레드 환경: final 변수는 다중 스레드 환경에서 안전합니다. final 변수는 한 번 초기화되면 이후에 값이 변경될 수 없으므로, 다른 스레드에서 값을 변경할 가능성이 없습니다. 상수 값 정의: final 변수는 상수 값의 정의에 사용될 수 있습니다. 예를 들어, Math.PI와 같은 상수 값은 final로 선언됩니다. 성능 향상: final 변수는 컴파일러에게 추가적인 정보를 제공하므로, 컴파일러가 최적화 작업을 더 잘 수행할 수 있습니다. 또한 final 변수는 컴파일 타임 상수 폴딩(constant folding)을 가능하게 하고, 해당 변.. 2023. 2. 22.
람다, 익명클래스는 왜 final 또는 effectively final 에만 접근 가능할까? 람다식은 메서드 내부에서 익명으로 생성되는 객체이므로, 해당 객체가 생성될 때 외부에서 참조하는 변수들은 반드시 final 또는 사실상 final과 동등한 효과를 가져야 한다. 람다식이 정의된 블록의 외부 변수를 캡처하는 방식에 기인하는데, 람다식에서 사용하는 외부 변수는 내부적으로 해당 변수를 참조하는 final 필드를 생성하게 되며, 이렇게 final 필드로 새엉된 참조 변수를 통해서만 해당 변수에 접근할 수 있다. 즉 람다는 내부에서 참조하는 변수가 final로 선언된 경우에만 참조할 수 있다. 람다식이 실행되는 시점에 해당 변수의 값이 이미 정해져 있기 때문에 람다식 내부에서 참조하는 변수가 변경될 가능성이 있으면 해당 변수를 final 로 선언하면 안되며, 다른 방법으로 값을 전달해야 하는데, .. 2023. 2. 22.
자바 클로저에 대한 짧은.. 클로저는 다른 함수의 스코프에 있는 변수를 참조하고 저장할 수 있는 함수를 말한다. 자바에서는 함수를 일급 객체로 다룰 수 있게 됩니다. import java.util.function.Supplier; public class ClosureExample { public static void main(String[] args) { // 클로저를 이용한 간단한 덧셈 함수 예시 int a = 10; int b = 20; Supplier adder = () -> a + b; System.out.println("Result: " + adder.get()); // Result: 30 // 클로저를 이용해 값을 변경하는 예시 int c = 5; Runnable updater = () -> { c++; // 클로저가 참.. 2023. 2. 22.
아 이게 맞는가 싶다.. 공부하고 정리하는걸 좋아는 하는데..그래서 따로 노트 앱에 정리도 하지만.. 블로그는 특정인이 볼 수 있다는 생각에 막 정리할수도없고.. 정리를 하자니..여러 책을 동시에보면서 진도도 느리게 나가고... 흐음~_~내 실력이 부족해서 그런듯 하다.. 정리는 당분간 멈추던지, 생각만 정리하던지 아님 정리를 조금 단순하게 하던지..조금 생각해 봐야겠다.. 하지만~~정리를 좀 해노면 나중에 복습할때 편하긴한데..흐음....흐음~~ 2023. 2. 22.
mysql 스토리지 엔진 MyISAM vs InnoDB 트랜잭션 지원 여부 MyISAM은 트랜잭션을 지원하지 않습니다. InnoDB는 트랜잭션을 지원하며, ACID(원자성, 일관성, 고립성, 지속성)를 보장합니다. 락(LOCK) 방식 MyISAM은 전체 테이블 락 방식을 사용합니다. 따라서 동시에 여러 개의 쓰기 작업이 일어날 경우 성능이 저하될 수 있습니다. InnoDB는 행 락 방식을 사용합니다. 따라서 여러 개의 쓰기 작업이 동시에 일어날 경우 성능이 향상될 수 있습니다. 외래키(Foreign Key) 지원 여부 MyISAM은 외래키(Foreign Key)를 지원하지 않습니다. InnoDB는 외래키(Foreign Key)를 지원합니다. 데이터 일관성 MyISAM은 데이터 일관성을 보장하지 않습니다. 따라서 데이터의 무결성이 중요한 경우에는 사용하지 않는.. 2023. 2. 22.
이펙티브 자바 3/E 이펙티브 코틀린 보다 어려운거 같다. 내용도 이펙티브 코틀린이 좀 더 짧아 더 빨리 본거 같은데.. 생각보다 잘 안읽힌다..(실력이 부족함을 느낍니다..) 1-2번 읽어가지고는 다 기억도 못할듯하다..도저히 이해 안가는 부분도 있지만, 최대한 곱씹어봐야겠다. 아직 절반 정도뿐이 못읽었지만.. 배운거도 많고, 부족함을 느끼는 부분도 많았다. 확실히 알면 좋은것들이 많으나, 엄청 와닿지 않는 부분도 있다.. 개인점수는 8 / 10 이다. 장점: 알면 좋은것들이 확실하다.모르는게 많아서 좀 더 공부하게 된다. 단점: 개인실력차에 따라 다르겠지만, 술술 읽히진 않는다. 총평: 자바하는 개발자라면..언젠가는 한번 쯤 넘어야 할 산이 아닐까. 2023. 2. 17.
[이펙티브자바]item 33.타입 안전 이종 컨테이너를 고려하라. 아이고 어렵네~ 타입 안전 이종 컨테이너: 한 타입의 객체만 담을 수 있는 컨테이너가 아니라, 여러 다른 타입을 담을 수 있는 타입 안전한 컨테이너. 구현방법: 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화환 키를 함께 제공하면 된다. 2023. 2. 17.
백준 2839 자바. 가끔 문제의 난이도를 떠나 생각나게 하는 코드들이 있다. 내가 제일 좋아하는 문제는 따로 있긴한데,,여튼..코드를 보자.. 풀이코드: public class _2839 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); int count = -1; for (int i = num / 5; i >= 0; i--) { int remain = num - (i * 5); if (remain % 3 == 0) { count = i + (remain /.. 2023. 2. 17.
[이펙티브자바]item 32.제네릭과 가변인수를 함께 쓸 때는 신중하라. varargs 매개변수에 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다. public class Dangerous { static void dangerous(List... stringLists) { List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCastException } public static void main(String[] args) { dangerous(List.of("There be dragons!")); } } 매개변수화 타입의 변수가 다른 객체를 참조하면 힙 오염이 발생한.. 2023. 2. 16.
728x90