본문 바로가기

자바

파이썬만 하다가 갑자기 자바를 했더니 요새 회사에서 하는 일은 주로 파이썬으로 데이터 주무르는 노가다. 오늘 오랜만에 자바로 알고리즘 퀴즈를 풀었는데, 몇 줄 되지도 않는 코드가 컴파일 에러가 주루룩난다. public class RSABreaker { // x return 타입을 빼먹었다. for (int i = 2; i 세미콜론을 빼먹었다. } return false; } public int decrypt(int e, int n, int b) { int m = 1; for (int i = 2; i if 문에 괄호를 빼먹었다. m++; } d = 1 ----> 자료형을 빼먹었다. 세미콜론.. 더보기
자바 System.out.println vs C printf 최근에 C라이브러리와 C라이브러리를 JNI로 래핑한 라이브러리의 성능을 비교하다가 C와 자바의 표준출력 차이에 대해서 알게되었습니다. 아래의 두 코드는 Hello World를 여러번 출력하는 초간단 자바와 C 코드입니다. //test.c #include int main() { int i; for (i = 0; i < 1000000; i++){ printf("Hello World!\n"); } return 0; } //Test.java public class Test { public static void main(String[] args) { for (int i = 0; i < 1000000; i++) { System.out.println("Hello World!"); } } } 이렇게 간단한 두개의 코드.. 더보기
부모 클래스의 private 메소드 overriding 자바에서 부모 클래스의 private 메소드를 overriding(재정의) 할 수 있을까요? 결론 부터 말하자면 안됩니다. 더 정확히 얘기하자면 그런게 없습니다. JLS(Java Language Specification)에 보면 overriding에 대해서 다음과 같이 정의되어 있습니다. 8.4.8.1 Overriding (by Instance Methods) An instance method m1 declared in a class C overrides another instance method, m2, declared in class A iff all of the following are true: 1. C is a subclass of A. 2. The signature of m1 is a subs.. 더보기
Collections.synchronizedCollection 메소드 Java Collection Framework의 대부분의 Collection 구현체들은 Thread-Safe하지 않으므로 멀티 스레드 환경이라면 반드시 synchronized block을 적절하게 잡아 주어야 합니다. 그런데, java.util.Collections 클래스의 static 팩토리 메소드인 Collections.synchronizedCollection 메소드를 이용하면 간편하게 Thread-Safe한 Collection 객체를 생성할 수 있습니다. 아래의 코드는 10000개의 스레드에서 1개의 TreeSet에 동시 접근해 Integer 객체의 삽입/삭제를 수행하는 코드로, 심각한 문제를 일으키는 코드입니다. import java.util.Collection; import java.util.T.. 더보기