오늘은 Java의 접근 제어자 중에서, private와 public에 대해서만 알아보도록 하겠습니다. 나머지 2개는 상속이랑, 패키지에 대해서 배우고 언급하도록 하겠습니다. 사실 저 혼자서 개발할 때에는 그냥 Class를 구조체 쓰듯이 다 public으로 선언해 버리고, 다른 클래스에서 접근 가능하게 할 수 있습니다. 그냥 내 마음대로 짜면 되니까요. 그랬으면 좋겠어요. A 클래스는 위와 같습니다. packA에 선언이 되어 있습니다. public으로 선언된 a가 있고, private로 선언된 b가 있습니다. 프로젝트의 구조는 다음과 같습니다. packA에 있는 A 클래스가 있고요. main 함수는, Main 패키지의 Main 클래스 안에 있습니다. 메인 함수에서 A 객체를 하나 생성하였습니다. A의 필드..
Java 검색 결과
java의 클래스들을 뜯다 보면, final 이라던지, static final과 같은 키워드가 생각보다 자주 보인다는 것을 알 수 있어요. 특히, String은 이 키워드가 상당히 많이 붙어있습니다. 이것은 무엇을 하는 것일까요? 한 번 값이 정해지면 그 값을, 수정할 수 없게 만드는 것입니다. 언제 정해질 수 있을까요? 메모리에 올라갈 때. 한 가지 예를 들어보겠습니다. String 클래스 안에는 final 필드인 value가 있습니다. 이것은 문자열의 실제 내용을 저장하기 위한 char형 배열입니다. 이것은 언제 값이 정해지나요? 생성자에서 초기화를 할 때 값이 정해집니다. String 객체 a를 새로 생성해 봅시다. 그러면, 생성자가 호출이 되고, 152 ~ 153번째 줄이 끝나고 나면, val의 ..
Java에서 객체를 정렬하려면 어떻게 해야 할까요? 기본적으로 어떤 것을 비교 기준으로 삼을지가 중요하다고 했습니다. Key 2개를 비교하는 compare 기반 정렬이라면. 이는 Quick sort, merge sort, Tim sort 등이 그러합니다. 반면에 Key 2개를 비교하면서 정렬하지 않는 것도 있는데요. 대표적으로 기수 정렬이라던지, Count sort 등이 있습니다. Merge Sort는 잘 보면 Key 2개를 가지고 비교하면서, 정복하는 알고리즘임을 알 수 있어요. 그러면, 우리는 어떠한 두 원소를 비교했을 때 어떤 것이 우선 순위가 더 높은지 정하는 게 중요하다고 했습니다. 그러한 기준이 있는 것들은 따로 비교 기준을 정의하지 않아도 됩니다. 그런데, 이런 경우를 생각해 봅시다. 하고 ..
생활코딩에 arrays.Copyof 메서드에 대한 질문이 올라왔었습니다. 그런 의미에서 이 함수를 간단하게 보도록 하겠습니다. 먼저, 메서드 이름에서 보면 알 수 있다시피, 배열을 복사하는 함수입니다. 배열의 내용을 다른 array로 복사합니다. 여기까지만 짚고, copyOf의 내용을 간략하게 보도록 하겠습니다. 먼저 primitive 타입이 아닌 배열을 copyOf를 할 때에는 3180번째 줄에 있는 친구가 호출이 됩니다. 그러면, 3181번째의 리턴문이 수행이 될 듯 싶네요. 따라 들어가 보겠습니다. 그러면 위 메소드가 수행이 되는데요. 3항 연산자, arraycopy, 리턴문. 이렇게 3개의 문장으로 구성이 되어 있습니다. 이게 어떻게 수행이 되는지 정확히 모르겠으니, main 클래스를 작성해서 디..
저번에, 왜 equals를 구현하면 왜 hashCode를 같이 구현해야 하는지에 대해서 설명을 했습니다. hash 계열의 자료구조 때문에 그렇다고 했었습니다. 그렇지 않으면 어떻게 동작하는지는 여기를 참고하시면 좋겠습니다. 이 내용에 대해서 숙지하셨다고 가정하고 진행하도록 하겠습니다. 면접 질문에서 간혹 가다가 등장하는지는 잘 모르겠습니다만, 어떠한 객체의 hashCode 값이 같은 것들을 모두 hashSet에 넣을 때, 어떤 일이 벌어지는지는 꽤 중요한 문제 중 하나일 겁니다. 사실, 우리는 그렇게 바보같이 구현할 일이 없습니다. 그렇지만, 저는 이에 대해서 포스팅 하도록 하겠습니다. 먼저 Java 8에서부터, hashMap은 버킷에 8개 이상 달려있을 때, Balanced Tree로 변환이 된다는 것..
최근댓글