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

    java 오토박싱 예제

    구 사용(언박싱)ArrayList list = new ArrayList();list.add(new Integer(10));list.add(new Integer(20));list.add(new Integer(30)); Integer i = (Integer) list.get(0);int value = i.intValue(); 현 사용 (오토 박싱)ArrayList list = new ArrayList();list.add(10);list.add(20);list.add(30); int value = list.get(0);

    java 객체 비교를 위한 equals 예제

    Value v1 = new Value(10);Value v2 = new Value(20); v1.equal(v2)를 하면 v1과 v2의 주소값을 비교하기 때문에 false가 나올 수밖에 없다. 이런경우 overiding을 통해 해결할 수 있다. class person{long id; public boolean equals(Object obj){if(id == ((Person)obj).id){return true;elsereturn false;}} class test{public static void main(String args[]){person p1 = new person(10);person p2 = new person(20); if (p1 == p2) // 이제 제대로 값 비교가 된다. }

    java 문자열 형변환

    - 기본형 -> 문자열String valueOf(boolean b)String valueOf(char c)String valueOf(int i)String valueOf(long l)String valueOf(float f)String valueOf(double d) - 문자열 -> 기본형boolean Boolean.getBoolean(String s)byte Byte.parseByte(String s)short short.parseShort(String s)int Integer.parseInt(String s)long Long.parseLong(String s)float Float.parseFloat(string s)double Doubel.parseDouble(string s)

    자바 얕은 복사, 깊은복사 개념 및 예제

    1. shallowCopypublic static int [] shallowCopy(int arr[])return arr; 얉은 복사를 의미하고 배열이나 객체를 복사할 때 단순히 참조만 복사하는것으로써 원본이 변경되면 복사본도 같이 변경된다. 2. deep copypublic static int [] deepCopjy(int arr[]){if (arr == null)return null; int result[] = new int[arr.length]; System.arraycopy(arr, 0 , result, 0, arr.length);return result;} ex) package javas; public class javas { public static void main(String args[])..

    java iterator 간단 사용법

    public static void main(String args[]) { LinkedList list = new LinkedList(); list.add(1); list.add(2); list.add(3); list.add(4); Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } boolean hasNext() : 읽어 올 요소가 남아있는지 확인Object next() : 다음요소를 읽어온다.,void remove() : next()로 읽어 온 요소를 삭제한다.

    java HashSet 설명 및 예제

    Hashset HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이며, Set인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. HashSet은 저장 순서를 유지하지 않기때문에 저장순서를 유지하고 싶은경우에는 LinkedHashSet을 사용하면 된다.(JDK 1.4 부터 추가됨) 사용예 public static void main(String args[]) { Set set = new HashSet(); for(int i=0;i

    Comparable vs Comparator

    Comparable vs Comparator - Comparable은 기본 정렬기준을 구현하는데 사용한다.- Comparator은 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용된다. - 오버라이딩 하지 않고 그냥 compare를 사용한다면 그게 Comparable이다. Class 클래스명 implements Comparator{public int compare(Object o1, Object o2){Comparable c1 = (Comparable) o1;Comparable c2 = (Comparable) o2;return c1.compareTo(c2) * -1 ; // -1을 곱하면 내림차순으로 정렬이 된다. }}

    java stringtokenizer 예제

    tringTokenizer(String str, String delim) : 문자열 str을 지정된 구분자로 나누는 StringTokenizer를 생성한다.int countTokens() : 전체 토큰수를 반환한다.boolean hasMoreTokens() : 토큰이 남아있는지 알려준다.String nextToken() : 다음토큰을 반환한다. ex) String source = "100, 200, 300, 400, 500";StringTokenizer st = new StringTokenizer(source, ","); while(st.hasMoreTokens()){System.out.println(st.nextToken());}}}

    JAVA 메모리 관련 정보 GC, 메모리영역

    자바 메모리 누수 측정 방법자바 프로그램의 실제 메로리 사용량은 시스템의 작업관리자에서 나오는 메모리 사용량으로는 측정 할 수없기에 디버그 출력으로 totalMemory() - freeMemory()를 출력하거나, 개발 도구를 사용하여 측정하는 것이좋다. GC 알고리즘메모리가 GC로 부터 해소가 되지 않는 루트 참조 객체(직간접적으로 참조가 되는 모드 객체)는 크게 3가지경우이다.Static 변수에 의한 객체 참조모든 현재 자바 스레드 스택내의 지역 변수, 매개 변수에 의한 객체 참조JNI 프로그램에 의해 동적으로 만들어지고 제거되는 JNI global 객체 참조이러한 경우에 사용할 수 있는 객체로 분류되어 GC에서 가져가지 않아 메모리가 누수될 수 있다. 자바 메모리영역은 3가지로 구성되어 있다.Hea..