본문 바로가기

Programinng/Java

자바(Java) - Integer에서 -128~127이 == 동일(HashCode) 비교가 true인 경우 다음을 테스트 해보자 Integer a = -128; Integer b = -128; System.out.println(a == b); Integer c = 127; Integer d = 127; System.out.println(c == d); Integer e = new Integer(-127); Integer f = new Integer(-127); System.out.println(e == f); Integer g = new Integer(128); Integer h = new Integer(128); System.out.println(g == h); - 결과truetruefalsefalse new라는 키워드를 사용하지 않고 -128~127은 헤쉬코드 비교를 했을때 true가 나온다.그 이유는 저.. 더보기
자바(Java) - Reflection 리플렉션 (RTTI : Run-Time Type Information) RTTI(Run-Time Type Information)을 이용하면 실행중에 타입 정보를 알아내고 사용할 수 있다. 이는 매우 까다롭고 복잡한 문제점들을 쉽고 빠르게 해결 할 수 있고, 굉장히 강력한 프로그램을 작성 할 수 있게 도와준다. 하지만 이는 객체 지향적인 프로그래밍 방법을 위배하고, 코드의 가독성을 떨어트린다는 의견도 있다. 그렇지만 이런 강력한 기능의 유혹을 벗어나긴 힘들다. 그리고 실제 여러 Framework에서 RTTI를 잘 활용 하고 있다. (특히나 Spring Framework) 자바에서는 모든 .class 파일 하나당 java.lang.Class 객체 하나씩 생성된다. Class는 모든 .class들의 정보를 가지고 있으며 .class파일에 같이 저장된다. 모든 .class들은 이 .. 더보기
자바(Java) - Generic 제너릭 우리가 흔히 Collection에서 Generic을 볼 수 있다. Generic은 구현하는 곳에서 Type을 정하지 않고 사용하는 곳에서 선택하도록 미루는 것이다. 이렇게 하는 이유는 하나의 구현에서(한 번 작성한 class로) 여러개의 Type을 사용하기 위해서이다. 그렇게 하지 않으면 사용할 Type마다 class를 작성해 줘야한다. (String을 받는 List, Integer를 받는 List ...또는 사용자가 정의한 Object는 어쩔텐가..) List strList = new ArrayList(); String temp = (String) strList.get(0); Generic은 JDK1.5부터 나왔는데, 위의 코드는 Generic을 사용하지 않고 ArrayList를 사용하는 코드이다. A.. 더보기
자바(Java) - Properties Properties파일은 Key, Value값으로 부가적인 정보를 정의해 놓고, 불러와서 Map에 저장해 놓고 사용한다. A=helloB=properties 우선 pro.properties 파일을 만들고 값은 위 처럼 저장해 놓는다. 그리고 아래 처럼 값을 읽어온다. Properties properties = new Properties(); properties.load(new FileInputStream("pro.properties")); Enumeration enumeration = properties.keys(); while(enumeration.hasMoreElements()){ String key = (String) enumeration.nextElement(); String value = pro.. 더보기
자바(Java) - null을 반환하면 안된다. (NullPointerException) null을 반환하거나 null을 전달해서는 안된다. 만약 null을 반환하거나 전달했다면, 전달 받은 곳에서는 null을 확인하는 코드를 작성해야 한다. 실수로 null을 확인하는 코드를 작성하지 못했다면 NullPointerException이 날것이다. 의도한 Exception이 아니라면 null을 반환하는 습관은 좋지 않다. if(list != null){ for(String str : list){ ... } }null을 반환한다면 이렇게 null을 체크하는 끔찍한 코드들이 난무 할 것이다. Collection일 경우 null대신 Collections.emptyList(), Collections.emptyMap(), Collections.emptySet()들을 반환한다. 그렇게 되면 null을 체크하.. 더보기
자바(Java) - Annotation 어노테이션 자바에서 Annotation은 소스코드에 주석을 다는 일이다.별도의 properties파일이나 xml같은 설정파일에 작성하는 부가적인 정보를 어노테이션으로 간편하게 설정할 수 있으므로, 코드의 양을 줄일 수 있다. 어노테이션은 @를 붙여 사용하며, 우리가 흔히 볼 수 있었던 어노테이션에는 @Override, @Deprecated 등이 있다. 어노테이션은 아래와 같이 사용자가 정의해서 쓸 수 있다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Anno { public String defaultVal() default "OK"; public String val(); } 여기서 Target은 어노테이션을 적용할 .. 더보기
자바(Java) - HttpClient 통신 <Get, Post, DefaultHttpClient> - 필요한 라이브러리httpcore-4.0.1.jarhttpclient-4.0.1.jarcommons-logging-1.1.1.jar Get 방식 HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://www.naver.com"); HttpResponse httpResponse = httpClient.execute(httpGet); System.out.println(EntityUtils.toString(httpResponse.getEntity())); Post 방식 HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPo.. 더보기
자바 JVM (Runtime Data Areas) 자바의 기본서적을 보면 자바는 '플랫폼에 독립적이다.'라고 설명되어있다. 하지만 그 설명이 매우 미약하여 대부분의 사람들은 왜 플랫폼에 독립적인지 잘 모른다. 자바의 철학이 바로 'Write Once, Run Everywhere' 인데, 이는 한번 작성된 프로그램은 어디에서나 실행 가능해야 한다라는 뜻이다. 이 철학을 실현하기 위해 가장 중요한 것이 바로 JVM이다. 사용자가 .java 파일을 작성하여 javac로 컴파일을 하게되면 .class라는 확장자를 가진 파일이 생긴다. 이는 JVM(Java Virtual Machine)이 읽을 수 있는 Bytecode로 해석된 것이며, 이 class파일을 가지면 JVM이 설치된 그 어느 곳에서도 사용이 가능하다는 것을 의미한다. 이로써 자바는 플랫폼에 독립적이다.. 더보기
자바(Java) - Exception은 OCP를 위배한다. Exception은 OCP(Open Closed Principle, 개방 폐쇄의 원칙)를 위배한다. Exception은 크게 Checked Exception과 UnChecked Exception이 존재한다.Checked Exception은 Exception을 상속 받은 것들이며, try~catch구문을 써주어야 한다. 하지만, UnChecked Exception은 RuntimeException을 상속 받아 명시적으로 try~catch를 해주지 않아도 된다. Checked Exception은 java.io.FileNotFoundException 같은 경우이고 UnCheck Exception에는 java.lang.ArrayIndexOutOfBoundsException 같은 경우이다. 처음 Checked Ex.. 더보기
자바(Java) - 객체지향이란? 객체 지향 프로그래밍(Object Orented Programing)이란 무엇일까? 처음 객체지향을 접하는 개발자들이 가장 혼란스러워 하는 부분이다.나도 처음에 객체지향 개념을 익히는데 많은 어려움이 있었다. (물론 지금도 잘 안다고 할 순없지만..) 여러 Fundamental책에서 흔히 말하길 객체(Object)란, '일상 생활에서 표현 할 수 있는 모든 것'이라 말한다. 이말에 몇 가지 추가하겠다. 일상 생활에 표현 가능한 모든것 + 처리과정, 정보, 오류등 눈에 보이지 않은 것들도 모두 Object로 표현한다. 객체지향 프로그래밍에서는 몇가지 원리 · 원칙(Principle)이 존재한다.'변하는것을 캡슐화하라.''구현에 의존하기 보다는 인터페이스에 의존 하도록 코딩하라.''각 클래스는 변경 요인이 .. 더보기