오늘은 String에서, Object의 valueOf는 어떤 식으로 동작하는지 알아보겠습니다. lombok을 쓰시다 보면, ToString 어노테이션을 잘못 쓰다가 stackoverflow 에러가 났다는 글을 보실 수 있습니다.이는 왜 그런 것일까요? 어떤 메서드 때문에 사이클이 문제가 된 것일까요? 결론부터 말하면 toString이 모든 필드에 대한 정보를 출력하게 만들었습니다. 그리고, 이들에 대한 정보를 출력하기 위해 호출하는 valueOf 메서드 때문입니다. 그래서, 이 메서드에 대해서 작성을 하였습니다. 문제 상황을 재현해 보면 아래와 같습니다. A.java입니다. A 안에는 필드 b가 들어 있습니다. A 객체 a를 하나 생성했다고 해 보겠습니다. 생성자가 호출이 되면, b에는 새로 생성한 B ..
string 검색 결과
파일 입출력을 다뤄봅시다. 사실, 예외나, 인터페이스를 하지도 않았는데 뜬금없이 이것을 다루는 이유는, 네. 맞습니다. 같이 다루기 위해서입니다. 여기에서는 파일을 읽는 것에 대해서만 중점적으로 다루고, 중간 중간에 예외나, 인터페이스에 대해 다루겠습니다. 그리고, 인코딩 디코딩도 중요하기 때문에 다시 한 번 짚고 넘어가겠습니다. 먼저, 1.txt에 저장된 내용을 보겠습니다. Hello Java, ... 이런 내용들이 들어 있습니다. 이 파일을 읽어서 콘솔에 그대로 출력하고자 합니다. 물론, src 아래에 1.txt가 있습니다. 파일 객체를 하나 생성합니다. src\\1.txt는 윈도우에서, 프로젝트의 루트로부터의 경로 /src/1.txt를 의미합니다. 파일객체 하나를 얻어옵니다. 그리고, try res..
문자열은 잘 다루기 어렵습니다. toUpperCase와 toLowerCase를 보다가, 문득 이런 질문을 하게 되었습니다. 제 생각은 항상 같다. 였습니다. 어디까지나 내부 클래스들을 뜯기 전까지는요. 내부 클래스를 보고 공식 문서를 보니, 아니라는 것을 알기까지 그리 오랜 시간이 걸리지 않았습니다. 항상 맞다. 혹은 틀리다는 너무 극단적인 케이스이기도 하고요. 이럴수가. 제가 알고 있었던 것이 사실이 아니였다니. 사실, 저는 heroes를 toUpperCase로 바꿔버리면 HEROES가 되고, giant를 대문자로 바꾸면 GIANT로 바뀌고, toLowerCases는 역방향으로 바뀔 거니, 길이가 항상 같을 거라고 생각했습니다. 프로그램 1을 보겠습니다. 0x130이라는 값을 가지는 어떤 문자 하나를 ..
네이버 이웃 블로그 글을 보다가 개발자의 70%가 틀리는 문제 라는 제목을 가진 어떤 글을 보았습니다. 사실 과장이 되었는지 아닌지는 모르겠지만, 헷갈리는 것 중 하나임은 분명해 보입니다. 언어는 파이선이였습니다만, 자바로 해도 정답률이 비슷하지 않았을까 싶기도 합니다. 이 코드는 어떻게 동작할까요? 먼저, toUpperCase는 String을 대문자로 바꾸는 메서드입니다. 예를 들어, "abcde".toUpperCase()의 리턴값은 "ABCDE"가 됩니다. 이건 그렇게 크게 어렵지는 않습니다. 여기서 출력값은 아래와 같이 됩니다. 분명한 것은 우리가 예상했던, ABCDE, BCDEF가 나오지 않았음을 알 수 있습니다. 왜 그럴까요? 코드를 뜯기는 상당히 기니, identityHashCode 값을 보도..
제목. 왜 10시간동안 아래 코드가 잘못된 동작을 하는 원인을 찾았는가? 제목이 꽤나 성가실 지도 모르겠습니다만, 오늘 몇 시간동안 삽질한 주제였습니다. 자신의 코드는 잘 안 보인다고 하는데, 그 말이 딱 맞았습니다. 심지어 고인물들이 모여 계시는 알고 싯포 톡방에서, const char * 문제인가? 를 가지고도 간접적으로 질문을 했는데, 실험도 해 보고, 이것 저것 팁들을 들어보니, 이것도 답이 아니였습니다. 당연하게도, 제가 완전히 잘못 파악한 것이였습니다. 부들부들 해당 문제를 풀기 위한 코드를 보도록 하겠습니다. 먼저, dp 함수는 아래와 같습니다. for loop를 돌면서, temp에 app(i, x-i)를 수행한 결과물인 string의 c_str()의 주솟값을 넣습니다. 그리고, temp와 ..
최근댓글