JAVA/JAVA 관련
문자열 정수를 int 형 정수로 변경하는 atoi 함수를 자바로 구현
C언어에서 제공하는 atoi 메서드를 자바로 구현해보자. 1234567891011121314151617181920212223242526public class Main { public static void main(String args[]) { atoi("20"); } public static int atoi(String str) { int radix = 10; byte[] temp = str.getBytes(); int result = 0; for(int i=0;i
Java List 인터페이스 중 CopyOnWriteArrayList 소개
자바에는 크게 4개의 List 인터페이스를 구현한 클래스가 있다. - Vector, ArrayList, LinkedList, CopyOnWriteArrayList 그 중 가장 생소한 이름이 있는데 CopyOnWriteArrayList이다. CopyOnWriteArrayList는 그냥 ArrayList랑 다르길래 화려한 이름을 가지고 있는걸까? ArrayList vs CopyOnWriteArrayList 일반 ArrayList의 경우 스레드에 안전하게 설게되어 있지 않기때문에 만약 스레드 처리가 필요한 List의 경우에 Vector를 사용하거나 ArrayList에 synchroized를 사용하여 처리하였다. 하지만 자바 1.5부터 있던 CopyOnWriteArrayList를 쉽게 이문제를 해결할 수 있다...
java 메모리 누수 주된 원인
자바 메모리 누수 측정 방법자바 프로그램의 실제 메로리 사용량은 시스템의 작업관리자에서 나오는 메모리 사용량으로는 측정 할 수없기에 디버그 출력으로 totalMemory() - freeMemory()를 출력하거나, 개발 도구를 사용하여 측정하는 것이좋다. GC 알고리즘메모리가 GC로 부터 해소가 되지 않는 루트 참조 객체(직간접적으로 참조가 되는 모드 객체)는 크게 3가지경우이다.Static 변수에 의한 객체 참조모든 현재 자바 스레드 스택내의 지역 변수, 매개 변수에 의한 객체 참조JNI 프로그램에 의해 동적으로 만들어지고 제거되는 JNI global 객체 참조이러한 경우에 사용할 수 있는 객체로 분류되어 GC에서 가져가지 않아 메모리가 누수될 수 있다. 자바 메모리영역은 3가지로 구성되어 있다.Hea..
HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성
HashMap에 저장되어 있는 키 값을 통해 저장된 value 값을 찾을 때, 입력된 object와 동일한 hashCode 값을 가지고 있는키를 찾기 위해 객체에 정의된 equals 메소드를 사용한다. 두 개의 object를 재 정의한 equals를 통해 비교한 후 동일한 객체 일 경우 동일한 hashCode값을 반환한다. 그렇기에 instance 객체를 hashMap에 key값으로 사용하고 싶은 경우에는 비교에 사용되는 equals()와 동일한 객체에 대한 동일한 hashCode 값을 반환하는 hashCode() 메소드를 Override 해야한다. 참고자료 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.K..
자바 Annotation 만들기
자바에서 Annotation은 별도의 properties파일이나 xml같은 설정파일에 작성하는 부가적인 정보를 어노테이션으로 간편하게 설정할 수 있다. 형태 123456789101112131415@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Anno { public String defaultVal() default “OK”; public String val(); } Colored by Color Scriptercs Target은 어노테이션의 적용 대상을 선정하고, Retension은 이 어노테이션의 정보가 어디 까지 유지되는지 설정한다. @Target - Constructor, Field..
Java Reflection 설명 및 사용법
자바는 Reflection이라는 언어의 특징이다. 리플렉션은 자가 프로그램이 자기 자신을 조사하거나, “introspect”하는 것을 실행하거나, 프로그램의 내부 프로퍼티의 조작을 허락하는 것을 말한다. 예를 들어 멤버변수의 이름을 취득하여 조작할 수 있다. 123456789try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMethods(); for (int i = 0; i
Java 문자열의 toString과 valueOf의 차이
두 메소드 모두 오브젝트의 값을 String으로 변경하지만 변경하고자 하는 오브젝트가 null 일경우 toString은 NPE 오류를 발생시키지만, valueOf는 null이라는 특수문자로 처리한다. 그래서 valueOf를 사용하는게 조금더 안전하다.
인스턴스 메소드와 정적 메소드
- 인스턴스 메소드는 인스턴스 메소드와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스변수를 필요로 하는 메서드이다.- 인스턴스와 관련이 없는 메서드를 클래스메서드(static메서드)로 정의한다. 1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통적으로 사용해야하는 것에 static을 붙힌다. 2. 클래스변수(static 변수)는 인스턴스를 생성하지 않아도 사용할 수 있다. 3. 클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다. 4. 메서드 내에서 인스턴스변수를 사용하지 않는다면, static 을 붙이는 것을 고려한다.
자바 매개변수 전달 방식(call by value, call by reference)
기본 자료형으로 선언된 변수를 함수의 매개변수로 사용하는 것처럼 클래스로 선언된 객체도 함수의 매개변수로 사용할 수 있다. 또한 동일한 클래스형으로 선언된 객체끼리는 대입 연산자로 값을 치환할 수 있다(대입 외의 다른 연산자는 사용 불가. 객체에서 객체를 더하고 빼고 곱하고 나누면 이상하잖아?). 만약 객체 단위로 치환하면 객체 내의 모든 멤버변수 값이 복사된다. - 객체에 대한 값에 의한 전달 방식 값에 의한 전달 방식은 함수를 호출할 때 기술한 실 매개변수(함수를 사용할 때 넘겨준 변수)의 값만 함수 측의 형식 매개변수(함수 내에서 매개변수를 받기 위해 선언한 변수)로 전달된다. 즉, 형식 매개변수는 실 매개변수와는 별개의 기억공간이 할당되고 여기에 값만 복사된다. 실 매개변수와 동일한 클래스형으로 ..
java 향상된 for문
1. 배열for( 배열의 타입 변수명 : 배열) {//문장} 2. 컬렉션for( 컬렉션에 저장된 요소의 타입 변수명 : 컬렉션){//문장} ex)1. 배열int [] arr = {10,20,30,40,50}; 구 반복문for(int i=0; i