python에서 2개의 set에 대해서 합집합, 교집합, 차집합, 대칭 차집합 등을 구하고 싶을 때가 있습니다. 어떻게 구하면 될까요? 먼저 set A에 속하지만, set B에 속하지 않는 원소들을 모두 구해봅시다. 그러려면 A에서 B를 빼면 됩니다. 3번째 줄에 C = (A - B)라고 했는데요. 이는 A와 B의 차집합을 구하라는 의미입니다. 이는 A에서 A와 B의 교집합을 빼는 것과 같습니다. A와 B의 교집합에 속하는 원소는 2이므로, A에서 원소 2가 빠지면 {1, 4}가 됩니다. 결과는 예상한 대로 나왔음을 알 수 있습니다. 교집합을 구해 봅시다. (A & B)는 set A와 set B의 교집합을 구합니다. A와 B 집합에 동시에 속하는 원소는 2입니다. 따라서 2만 출력됩니다. A 또는 B에 ..
코딩 검색 결과
안녕하세요. 666번째 글입니다. 이번 시간에는 reflection을 이용해서 field value를 set하는 코드만 간략하게 보겠습니다. 먼저, data 클래스의 코드는 요렇습니다. private field로 선언된 x, y, 그리고 hm이 있네요. 당연하게도, hashCode와 equals, 그리고 toString은 오버라이딩 되어 있습니다. 우리는 먼저, 이름으로 Field에 대한 정보를 얻어온 다음에, 10번째 줄에서 set 메서드를 이용해서, 객체 d의 hm 필드의 값을 {"a":"b", "c":"d"}로 바꿀 것인데요. NoSuchFieldException이 뜹니다. 왜 그런지 메서드 설명을 봐야 겠어요. 먼저, 이 친구는 public member인 field member를 리턴합니다. Da..
저번 시간에 transient를 보다가, 잠깐 reflection에 대해서 언급했었는데요. 아마 언급을 하지 않았더라도, 클래스의 메타 데이터에 대한 정보를 얻어온다. 라는 것은 언급했을 듯 합니다. 내부를 보실 때, 이해하셨다면 좋았을 법한 로직만 간단하게 소개해 볼게요. 먼저, 객체를 직렬화 하기 위해서, 필드와 필드에 셋팅된 값이 어떤 값이였는지 알아야 했습니다. 그러한 정보들을 얻어와서 직렬화를 시킨다고 했어요. 그런데, transient 같은 키워드가 앞에 붙어있으면 직렬화를 하지 말아야 함을 의미해요. 즉, 필드 중에서 직렬화를 하지 말아야 하는 키워드가 앞에 붙어있는지도 알아내야 합니다. 즉, 객체에 대한 정보를 얻어올 때, 이 필드가 직렬화가 가능한 친구인지, 할당된 값은 무엇인지. 필드 ..
안녕하세요. 이 글에서는 Serializable에 대해서 상세히 다루지 않습니다. 다만, java에서 transient 키워드에 대해서 간단하게만 다뤄보고자 합니다. transient가 무엇을 하는 지 알아보기 위해 Serializable을 implements 했어요. 굵게 쳐져 있는 Warning. 신뢰되지 않는 데이터를 역직렬화를 시키지 말아달라는 부분이 있긴 하지만, 여기에서는 다룰 주제가 아닙니다. 직렬화? 뭘 어떻게 한다는 것일까요? data class를 직렬화 시켜서 파일로 떨궈보겠습니다. 그랬더니 byte 형태로 표현이 되었어요. AC ED 00 05 ... 00 02 data의 내용을 조금 조작해서 직렬화를 시켜 봤더니 요래 나왔네요. AC ED 00 ... 01. 우리가 객체를 누군가와 ..
톡방에서 이야기를 나누다가 record 클래스가 최신 자바 버전에 도입되었다는 것을 알게 되었습니다. 이것을 써 보려고 jdk 17을 깔고, intellij 버전을 2021.x 버전까지 올리게 되었습니다. 제가 설치했던 버전에서는 language level 선택에 17이 없었거든요. 하튼, 간단하게만 써 보고, 코딩 테스트를 푸실 때 어떻게 쓰시면 좋을지 정도만 보도록 하겠습니다. 먼저, record data는 요래 정의했습니다. 그냥 int형 x, int형 y로 이루어진 레코드 (직역하면 구조체) 정도라고 생각하면 좋겠네요. 그러면 이 친구들은 어떤 특성을 가질까요? 먼저, 필드들이 final field로 구성되어 있어요. 그렇다는 이야기는 한 번 값이 정해지면 바뀌지 않는 immutable한 특성을 ..
최근댓글