equals() ? 두 객체내 데이터 (내용) 이 일치하는지 확인하는 메소드이다. 이 메소드가 왜 필요한지? 두 개의 Person 객체가 있다고 해볼 때, 이 두 객체를 비교해보자. 결과는 어떻게 나올까? 위 객체 코드 비교에 대한 결과는 아래와 같다. Why ? person1과 person2는 동일한 객체가 아닌 각각 개별적인 객체이기 때문이다. 동일한 객체라는 것은 메모리에 담긴 객체를 동일하게 참조한다는 것이며, 아래와 같다. 따라서 결과 또한 바뀌게 된다. 그렇다면 의문이 생긴다. equals는 내용을 비교한다고 했는데, 왜 맨 위의 예제에서 equals로 비교 한 것도 false가 나온 것인지? 결론은 간단하다. Object의 equals 함수 코드 구현을 보면 다음과 같기 때문이다. 코드를 보..
valueOf (Object obj) Returns the string representation of the Object argument. (Java docs) if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned. (Java docs) 파라미터에 들어가는 Object (int, boolean, double, float ...) 등을 String 문자열 표현으로 바꿔 반환해준다. 파라미터가 null 이라면, String 문자열로 "null"로 반환되며, null이 아니라면 toString() 함수값을 반환한다. Object.toString() In general, t..
String.split(String regex) / StringTokenizer split 메소드는 String 클래스의 메소드로서 regex를 기준으로 나눈 문자열 배열을 반환한다. StringTokenizer는 메소드가 아닌 클래스이며, 문자열을 구분자로 분리한 후 문자열 토큰을 만든다. StringTokenizer는 Enumeration 인터페이스를 구현하였기 때문에 next~() 메소드를 사용하여 토큰을 하나씩 꺼낼 수 있다. hasMoreElements() / hasMoreTokens() 두 메소드의 성능적인 차이점은 없으며, Java api doc의 설명은 다음과 같다. hasMoreElements() Returns the same value as the hasMoreTokens method...
String String은 immutable (불변) 한 특징을 가진다. 따라서, String은 생성자 (new String) 를 통해 생성되면 해당 instance의 공간은 절대 변하지 않는다. 그래서 +, concat 등 문자열에 변화를 준다고 하더라도 메모리 공간이 변하는 것이 아닌 새로운 메모리 공간에 새로운 String 객체를 만들고 그 객체를 참조하도록 한다. 이렇게 새로운 문자열이 생성되면 기존의 문자열이 Heap 메모리 공간 (가비지 컬렉터가 동작하는 영역) 을 차지하고 있기 때문에 가비지 컬렉터에 의해 제거되야 하는 단점이 있다. 또한, 이러한 문자열 연산이 많아질수록 계속적으로 문자열을 만드는 Overhead가 발생하므로 성능이 떨어질 수 밖에 없다. 대신에 immutable 이라는 특..
예시 데이터는 fruit를 사용한다. 1. str_detect(string, pattern) string 문자열내에 pattern의 위치에 상관없이 존재하는지의 여부를 알려준다. 2. str_which(string, pattern) str_detect와 달리 pattern이 있는 string의 index를 반환한다. (문자열 내부 index는 str_locate) 3. str_locate(string, pattern) str_which가 pattern을 포함하는 string의 index를 알려주는 것이라면 str_locate는 string 문자열 내우베엇 pattern이 시작되고 끝나는 index를 반환한다. 4. str_count(string, pattern) string 문자열 내 pattern의 개..
HashTable 특징 HashTable의 경우, 데이터 변경 메소드가 모두 Synchronized (동기화) 메소드로 선언되어 있다. 메소드 호출 전에 멀티 쓰레드 환경에서 쓰레드 간에 Synchronized Lock (동기화 락) 을 걸기 때문에 데이터의 무결성을 보장한다. Synchronized Lock은 시간이 오래걸리기 때문에 HashTable은 속도가 느리다. 멀티 쓰레드 환경에서 사용하기 적합하다. HashMap 특징 HashMap의 경우, HashTable와는 달리 동기화 (Synchronized) 처리를 하지 않기 때문에 데이터의 무결성을 보장하지 않지만 속도가 빠르다. 단일 쓰레드 환경에서 사용하기 적합하다. HashMap을 사용하여 동기화 문제 해결? SynchronizedMap을 이..
예시 데이터를 준비한다. (Parameter에 들어가는 데이터는 범주형이라고 생각하면 된다.) 1. fct_count(데이터, sort = F, prob = F) 각 levels의 갯수를 구해준다. sort = T라면 내림차순으로 정렬하여 반환하고, prob = T라면 전체 데이터 중 각 levels의 비율들을 구해준다. 2. fct_unique(데이터) unique() 함수와 똑같이 중복을 제외한 유일한 집합들을 보여준다. 차이점은 반환해줄 때, factor형으로 반환한다. 3. fct_c(데이터1, 데이터2) levels가 다른 두 개의 factor 데이터를 하나의 factor 데이터로 묶어준다. levels를 묶어주기 때문에 반드시 데이터는 factor형이어야 한다. 4. fct_unify(list..
예시 데이터는 dplyr 패키지에 있는 'starwars' 데이터를 이용한다. 데이터 구조를 보자. 구조를 한 눈에 보기 위해서 일부 열들을 제거한다. 1. pull(데이터, 추출할 column) 선택한 column의 값들을 vector로 반환해준다. 2. select(데이터, 추출할 column) pull과 기능은 비슷하다. 차이점은 반환하는 데이터 형태로 select는 data.frame으로 반환한다. 3. pull과 select와 함께 쓰면 좋은 함수들 3-1. starts_with(문자열), ends_with(문자열) starts_with는 paramter로 전달한 문자열로 시작하는 column들을 반환한다. ends_with는 start_with와 반대로 parameter 문자열로 끝나는 col..