setter나 getter는 엄청나게 쓰는 메서드들이기도 합니다. 그런데, 문득 setter는 왜 사용을 지양해야 한다고 할까? 에 대해서 곰곰히 생각해 보게 되었습니다. 사실, 이 질문에 대해서, 명확하게 떨어질 만한 답을 찾지 못하였습니다. 대신에, 외부에서 세터 를 호출해서, 변경이 되면 위험한 속성들에 대해서 다시 생각해 보게 되었습니다. 그에 대한 답 부터 해 보도록 하겠습니다. setter는 객체의 속성을 변경하는 메서드입니다. 예를 들자면 Dog라는 모델이 age와 이름을 가지고 있을 때, setName은 이름을 바꿔줄 때 쓰고, setAge는 나이를 바꿔줄 때 쓰입니다. 굳이 이들의 존재에 대해서 잘 모르더라도, Collections를 보시면 쉽게 찾을 수 있습니다. 예를 하나 들어보겠습니..
Java 검색 결과
면접 질문들을 모아놓은 레포를 보다 보면, 싱글톤 패턴은 많이 언급한다는 것을 알 수 있습니다. 거기서 DCL 패턴이 나오고, volatile도 나오는데요. 여기서 volatile이 무엇을 의미할까요? 먼저, 간단하게 프로그램을 작성해 보겠습니다. Main 스레드와 Worker1 스레드 하나가 있습니다. 이 프로그램은, Main Thread에서 w1의 stop flag를 중간에 true로 셋팅합니다. Worker1의 run 메소드는 그냥 stop flag가 false이면 계속 돕니다. 결과가 어떻게 나올까요? 공교롭게도, 0 : stop flag만 출력하고 더 이상 진행되지 않습니다. 이는 왜 그럴까요? 공식 문서를 보면 자세히 알 수 있습니다. Note 바로 윗 단락의 내용을 천천히 봅시다. 일단, w..
java의 파일 클래스는 파일이나 폴더에 대해서 조작을 수행할 수 있습니다. 당연하게도, 폴더 내에 있는 파일들도 조회가 가능합니다. 이번 시간에는 특정 폴더 내에 있는 파일을 순회하는 방법을 알아보도록 하겠습니다. 먼저 File 객체에 무슨 메서드가 있는지 보겠습니다. listFiles와, isDirectory가 눈에 보입니다. 우리가 필요한 것은 폴더 내에 있는 하위 폴더, 파일들을 모두 탐색하는 것입니다. 그렇다면, 탐색하고 있는 파일 객체가 디렉토리인지, 그냥 파일인지 판단을 해야 합니다. 만약에 디렉토리라면, 그 안에는 파일들이 있을 것이니, 파일 목록들을 불러와야 합니다. 이것을 위해 필요한 메서드는 listFiles입니다. 만약에 해당 파일 객체가 디렉토리가 아니라면 null을 리턴합니다. ..
저번 시간에 객체의 완전한 상태에 대해서 이야기를 했습니다. 이번 시간에는, method chaining에 대해서 알아보겠습니다. Dog 클래스가 있다고 해 보겠습니다. name과, 출생 년도, 그리고 동물 등록 번호를 필드로 가지고 있습니다. 평범한 getter와 setter가 있습니다. Name과 Reg_id에 세터가 있는 이유는 dog가 생성되고 나서, 시간이 지난 후에도 바뀔 수 있는 속성이기 때문입니다. 반면에, 태어난 연도인 year는 바뀌지 않습니다. 그러니, setter 등으로 열어둘 필요가 없습니다. 그래서, year는 setter가 없습니다. 단지 객체가 만들어 지고 초기화 하는 과정에서만 값이 들어갈 뿐입니다. 이 정도 보고 넘어가시면 될 듯 합니다. 그리고 toString을 over..
백준 1325번은 c,c++로 풀면 쉽게 풀리는 dfs, bfs 문제 중 하나입니다. 그런데 Java로 풀면 시간이 빡빡한데요. 그 이유 중 하나는 박싱, 언박싱에 의한 객체 생성 때문입니다. 이에 대해서 아직 익숙하지 않으시다면, 이 포스트를 보고 오시는 것도 좋습니다. 통과를 하시고 나서, java로 통과한 코드 중에서 1등과 2등 코드의 차이를 보면 대충 3초 가량이 나는 것을 볼 수 있습니다. 이 두 코드를 보시면, 하나는 primitive type 배열을 썼고, 다른 하나는 그렇지 않았음을 볼 수 있는데요. 3초 차이라니. O(nm) 복잡도에서, 아슬아슬하게 통과할 복잡도에서, 3초면 상당히 큽니다. 그 원인 중 하나가 필요 없는 객체 생성이라 했으니, trace를 해 보겠습니다. jdk 8 기..
최근댓글