안녕하세요. 조경완입니다. 어제 카톡 방에 이런 질문이 올라왔습니다. mutable한 객체를 키 값으로 넣었고, 맵이나 셋을 넣은 키를 어디선가 변경했는데, 왜 맵이나 셋 계열의 containsKey가 제대로 동작하지 않을까요? 사실, String을 키 값으로 삼으면 문제는 없습니다. 이것은 immutable 하기 때문입니다. 뮤터블의 반대 말이죠. im이 붙으면. 아래 예제 프로그램을 보겠습니다. 코드에서 필요 없는 부분은 생략하였습니다. equals는 x 값이 같으면 true를 리턴하게 되어 있습니다. 그리고 hashCode는 x를 2로 나눈 나머지를 돌려줍니다. Main 함수를 보겠습니다. x에 2, 3을 넣은 객체 a, b를 hashMap에 넣습니다. 그리고, 객체 a의 x값을 2에서 5로 바꿉니..
전체 글 검색 결과
파일 입출력을 다뤄봅시다. 사실, 예외나, 인터페이스를 하지도 않았는데 뜬금없이 이것을 다루는 이유는, 네. 맞습니다. 같이 다루기 위해서입니다. 여기에서는 파일을 읽는 것에 대해서만 중점적으로 다루고, 중간 중간에 예외나, 인터페이스에 대해 다루겠습니다. 그리고, 인코딩 디코딩도 중요하기 때문에 다시 한 번 짚고 넘어가겠습니다. 먼저, 1.txt에 저장된 내용을 보겠습니다. Hello Java, ... 이런 내용들이 들어 있습니다. 이 파일을 읽어서 콘솔에 그대로 출력하고자 합니다. 물론, src 아래에 1.txt가 있습니다. 파일 객체를 하나 생성합니다. src\\1.txt는 윈도우에서, 프로젝트의 루트로부터의 경로 /src/1.txt를 의미합니다. 파일객체 하나를 얻어옵니다. 그리고, try res..
python에서 string에 append를 할 때, list에 append를 하고, join 메서드를 쓰곤 합니다. (전 귀찮아서 +=을 쓰곤 했습니다.) 간단하게 알아보겠습니다. 이 문서를 보시면 다음과 같이 정의가 되어 있습니다. iterable. 이는 반복될 수 있는 이라는 뜻을 가집니다. 그런데, 사실 이 블로그에서도 몇 번 이야기를 했습니다. 이터레이터. c++ STL 하면서 몇 번 언급을 했는데요. 순회 가능한 무언가라고 보시면 됩니다. 파이선에서는 dict, set, list와 같은 것들이 있습니다. 그러면 앞에 붙는 문자열이 어떤 역할을 하는지 보겠습니다. list li에 'A', 'B', 'C', 'D'가 있습니다. 2번째 줄에 '#'.join(li)가 있습니다. 결과값을 봅시다. A#..
이번 시간에는 cut 명령어에 대해서 간단하게 알아보겠습니다. 먼저, 어떤 파일인 거 같나요? 유저 이름이 나오고, /usr/sbin/nologin 같은 것이 나오는 걸로 보아서는, /etc/passwd의 내용으로 보입니다. 여기서 우리는 유저 네임만 뽑아내려고 합니다. 유저 이름은 1번째 필드이고, : 을 구분자로 구분되어 있습니다. 옵션 하나. -d는 델리미터를 의미합니다. 토큰을 구분지을 때, 구분짓는 것을 의미합니다. 둘 이상일 때에는, awk를 쓰는 것이 하나의 방법인 듯 싶어요. 이에 대해서는 awk 명령어 포스팅에서 언급을 드린 바가 있습니다. 옵션 둘. -f는 필드를 의미합니다. 구분자로 구분된 구획이 있을 텐데요. 몇 번째 구역을 출력할 것인가를 나타냅니다. 예를 들어서, /etc/pas..
filebeat가 긁어올 path는 어떻게 설정하면 될까요? 버전 7.9.2를 기준으로 설명하겠습니다. filebeat의 설정 파일을 보면, inputs라는 것이 있습니다. 여기서 type과 enabled와 paths와 같은 것들을 설정할 수 있습니다. 당연하게도, enabled는 true로 셋팅해 주면 되겠네요. 그런데, 조심해야 할 것은, paths는 일반적인 regex가 아닌, glob 패턴을 쓴다는 것입니다. 이는 7.9.x의 파일비트 공식 문서에도 나와 있습니다. 그러면, glob base path로 설정해 보도록 하겠습니다. 자세한 것들은 이 문서나, man glob을 참고하세요. 몇 가지를 봅시다. 먼저 **은, recursive 하게 매치가 된다는 의미입니다. 예를 들어서, 위의 /home..
최근댓글