이펙티브 자바에 나오는 깊숙한 내용은 나중에 하기로 하고, try with resources 문에 대해서 간략하게 언급해 보도록 하겠습니다. 닫아야 할 자원. 이것들은 생각보다 어렵지 않게 찾을 수 있습니다. Stream, DB connection 등이 이에 속합니다. 저 또한 프로그램을 이런 식으로 작성하곤 했습니다. 대충 A라는 친구를 새로 생성합니다. 이것을 새로 생성하면 내부적으로 리소스를 오픈하는 작업을 수행합니다. 흔히들 생각하는 인풋 스트림이나 DB connection 등이라고 생각하시면 됩니다. try 안에서 do work를 합니다. 그런데, try 내부에서 a.close를 호출하면 안 됩니다. 왜냐하면, 중간에 Exception이 걸려서, main 함수에서 catch가 되는 경우에, a...
코딩 검색 결과
사실, 저는 백준을 풀 때 define 문을 상수 정의할 때 빼고는 써 본 적이 없었습니다. 실무에서는 어떻게 쓸 지는 잘 모르겠지만요. 상수 정의할 때도 가끔씩 써서, 그리 많이 쓴 적은 없습니다. 물론, C언어 시험 볼 때에는 많이 썼겠지만요. 보통 넓이를 구하는 것은 define이 아니라, 함수로 쓰는 편입니다. 이것은, 배보다 배꼽이 더 커지기 때문에 그렇기도 합니다. 백준을 한참 할 때, 많이 본 질문 글 중 하나는 이것을 잘못 써서 맞았는데 왜 틀려요? 하는 경우였습니다. 전처리기에 대한 이야기는 나중에 정리할 때 한꺼번에 언급하기로 하고요. 오늘은 그냥 간단하게 개론만 보도록 하겠습니다. 먼저 상수 정의할 때에는 요긴하게 쓰입니다. 이것은 제가 세그 트리를 구축할 때, (1
finalize 함수는 Object 클래스에 있는 메서드입니다. 공식 문서에서는 아래와 같이 설명하고 있습니다. 여기서 중요한 것은, gc가 해당 object를 참조하는 레퍼런스가 없을 때 Call 한다는 것입니다. 예제 프로그램을 몇 개 보면서 이해해 보도록 하겠습니다. 1번째 프로그램입니다. Obj는 Object를 상속받습니다. 따라서, finalize를 오버라이딩 할 수 있습니다. finalize가 gc에 의해서 호출이 되면, Common.rm이 증가하게 되는데요. 새로운 Obj 객체 1000만개를 생성하기만 했습니다. 그리고 80초동안 sleep을 시키고, Common.rm을 출력하였습니다. 1000만이 출력되지 않았다는 것이 중요합니다. 100개의 Obj를 새로 생성한 다음에 Common.rm을..
오늘은 CRUD를 할 때 많이 써먹는 sql의 insert 문에 대해서 간단하게 알아보겠습니다. 보통, 저는 테이블에 레코드를 추가하는 것을 아래와 같이 작성합니다. 이제 예제를 보도록 하겠습니다. 저는 DBeaver에 mysql을 연동해서 실습을 해 보도록 하겠습니다. 먼저, 테이블 t의 정보를 보겠습니다. a라는 컬럼과 b라는 컬럼이 있습니다. 그리고, 저는 이 둘에 아무런 제약 조건을 걸어놓지 않았습니다. 이제 테이블 t(a,b)에 ('A','A')와 ('A',('B')를 추가하도록 하겠습니다. 그러면 위와 같이 작성하시면 됩니다. insert into t(a,b) values ('A','A'), ('A','B'); 이것은 a가 'A'이고 b가 'A'인 레코드와, a가 'A'이고, b가 'B'인 레..
테이블에서 PK가 걸린 컬럼이 있었습니다. 그 컬럼을 id라 하겠습니다. 수천개의 데이터를 insert를 해야 하는데, 해당 id값이 있는 데이터를 insert를 해야 하는 경우에, 오류가 발생합니다. 저는, 이러한 상황이 발생하는 데이터를 모두 뽑고 싶었습니다. 어떻게 하면 좋을까요? 제가 말한 문제를 해결하기 위해서, exists 구문을 사용하는 것을 고려해 볼 만 합니다. 이것은, 하위 질의의 결과가 빈 릴레이션을 반환하는 경우에 False를, 아니라면 True를 리턴합니다. 예제를 하나 들어보겠습니다. 먼저, t2에 있는 데이터들을 보겠습니다. 2개의 레코드가 있습니다. (1, 'cho')하고, (3,'gahui')가 있습니다. 먼저 exists 안에, select * from t2를 넣어보겠습니..
최근댓글