-
String , StringBuffer, StringBuilder
String 자바에서 문자열을 다룰 때 주로 String 객체를 사용합니다. String 객체는 한번 생성되면 할당된 공간이 변하지 않는 불변의 속성을 가집니다. String str = "Hello World!"; str += " maan"; String은 내부 값을 수정할 수 없기 때문에 + 연산자를 사용하면 새로운 객체를 만들어 리턴시켜 줍니다. str객체에 Hello World! 를 선언 한 후 maan이라는 단어는 + 연산을 통하여 추가 하면 str 객체는 “Hello World! maan” 이라는 값을 가지고 있는 새로운 객체를 생성하게 되고 기존의 객체는 가비지(Garbage)로 있다가...
-
java 커스텀 어노테이션
Annotation Annotation을 직역하면 주석 이라는 뜻인데, 간단히 말해 소스에 메타 데이터를 주입시켜주는 일종의 표식 정도로 생각하면 좋겠습니다. 스프링 으로 구성된 웹서버에서 흔히 사용하는 @Controller, @Service, @Repository 등을 예로 들 수 있겠네요. 물론 다양하고 광범위한 활용 방법이 있겠지만.. 직접 사용해 보았던 것을 소개하고, 방법을 이해하신 뒤에 응용해 보시는 편이 더 좋을 것 같습니다.! 어노테이션을 만들자 간단한 커스텀 어노테이션을 만들어 보겠습니다. // MyAnnotation.java @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface MyAnnotation { } MyAnnotation 이라는 이름의 커스텀 어노테이션이...
-
객체의 복사에 대하여 (Shallow copy / Deep copy)
java는 Pass by value 일까? reference 일까? 자바를 처음 배울 즈음, 메소드 인자(parameter)로 사용되는 객체는 value가 아닌 reference를 전달한다는 교과서 구문을 읽고 이게뭐야 하고 가볍게 흘려넘긴 기억이 있다. 말도 안되는 코드지만 다음 코드의 결과를 예측할 수 있었을까?? Person p = new Person("noname"); setAgentName(p); System.out.println(p.getName()); // 1 p = setAgentName(p); System.out.println(p.getName()); // 2 private Person setAgentName(Person p) { p.setName("firepizza"); return p; } 물론 모두 예상했겠지만 1,2 모두 ‘firepizza’가 출력된다. 그럼 이건 어떨까? Person p = new...
-
java serializable
직렬화란? 직렬화 : JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 (자바 내부에서 사용되는 객체/데이터를 외부 자바 시스템에서도 사용할 수 있도록 함) 역직렬화 : 직렬화 된 바이트 형태의 데이터를 JVM 에서 사용 하도록 다시 객체로 변환하는 기술 [출처] https://ktko.tistory.com 어떤 조건이 필요한가? 직렬화 : “java.io.Serializable” 인터페이스를 상속받은 객체 기본형 타입(int, char, String, short, double, long, byte 등등)은 직렬화가 가능 transient가 사용된 멤버는 전송되지 않는다 생성자나 메소드는 직렬화 대상에 속하지 않는다 역직렬화 : 직렬화...
-
Java Code Convention
본 code convention 은 Oracle Code Convention을 참고로 하되 약간 변형된 부분이 있음을 알려드립니다. 예) 한 줄 주석과 꼬리주석의 사용법 WHY Code Conventions(코딩 규약)? 1인 개발보다는 여러 명이서 협력하는 경우가 더 많다. 소프트웨어를 직접 개발한 개발자가 해당 소프트웨어의 서비스가 종료될때까지 유지보수를 담당하는 경우는 드물다. 코딩 규약을 지키면 다른 개발자가 소스 코드를 보았을 때 더 빠른 시간안에 이해할 수 있도록 도와준다. 1. 들여쓰기 한 줄의 길이 줄 나누기 2. 주석 블록 주석 한 줄 주석 꼬리...
-
Java 제네릭
Java 제네릭 제네릭은 타입에 대해 파라미터 형식으로 보여 주며 컴파일시 구체적인 타입으로 결정되도록 하는 것을 말한다. 클래스나 메소드에 매개 변수의 타입이나 리턴 타입에 사용 할 수 있다. 제네릭이 나오기 전 Object 타입으로 아래와 같이 표기 했지만 이렇게 쓸 경우 get을 값을 받을 때 원하는 타입으로 형변환을 해줘야 하는 번거로움이 있다. public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } 아래와...
-
equals() And hashCode()
객체를 비교하는 방법 연산자(==), ‘equals()’, ‘hashCode()’ 연산자(==) 두 객체가 같은것을 가르킬 때 “true” 를 리턴. == 연산자는 피연산자가 primitive type(int, double, boolean, …)일 때는 값이 같은지 비교하고, 피연산자가 그 외 객체, reference type일 때 가리키는 주소가 같은지를 검사한다 아래의 예제는 연산자 비교 차이에 대한 이해를 돕기 위해 String 객체를 예로 들었다. equals() equals는 내용이 같은지를 검사하는 메서드. Primitive Type은 내용이 같은지 검사하고 Reference Type은 객체의 주소가 같은지 검사 한다. ‘==’ 연산자와 다른 점은 완전히 같은...
-
자바 잡설
시작하며… 개발자로 인생을 보내면서 프로그래밍 언어에 대해 관심을 갖는 것은 지극히 당연한 일이다. 그 관심의 대부분은 기능성, 미래, 또는 나에게 밥벌이가 될 것인가의 등등에 집중되는 것 또한 당연한 일이다. 나 또한 그러하다. 하지만 가끔은 개발자의 관점에서 벗어난 시각으로 프로그래밍 언어의 과거나 배경에 대해서 살펴보는 것도 재미있지 않을까 싶은 생각이 들어 이번 기회에 한 번 정리해 보았다. 이 포스트에서 다룰 언어는 부동의 시장점유율 1위, 자바다. 자바의 등장 보통 하나의 프로그래밍 언어가 일정 이상의 인지도와 시장 점유율을...
-
java GC
시작에 앞서.. java GC 를 다루게 된 것은 별다른 이유가 있는 것은 아닙니다. java 개발을 하고 있고 언젠가 봐야지 하며 미루던 것을 하나씩 정리 하려고 합니다. 앞으로도 java 또는 개발에 필요한 기초를 하나씩 점검해 보고자 합니다. Hello World? Stop the World! GC 를 실행하기 위해 JVM 이 어플리케이션 실행을 멈추는 것. stop-the-world 가 발생하면 GC 를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤 GC 를 튜닝 한다는 것은 “stop-the-world” 의 시간을 줄이는 것. 객체와...
-
Hello World
서론 어떤 주제로 포스팅의 처음을 써 볼까 한참 고민 하다가 처음이니 익숙한 언어에 대해 써 보기로 했습니다. 현재 7년된 서비스를 운영하고 있는데 실무에 바쁘다는 핑계로 … 아직 java6으로 개발 된 사이트입니다…. ㅜㅜ 오래된 서비스를 운영 하다 보니 여러 가지 문제가 발생하고 있어서 업그레이드를 해 보려 하는데.. 사실 java만 업그레이드 뿐만 아니라 부가적으로 웹서버, spring 버전업등의 작업이 함께 이루어 져야 하니 이 작업이 만만치 않더라구요. 그래서 일단은 자기 계발을 너무 안 한 것에 대한 반성으로 java...
-
Java Image Performance
실제 업무에서 Java로 image를 처리하여 서비스 하는 경우는 그렇게 많지 않을것이다. 예시 프로젝트를 통해, Java로 이미지를 읽고, 가공하고, 다시 인코딩을 하는 일련의 과정을 쓸 예정이다. 하지만 이미지 처리에서 가장 중요한 건 역시 속도다. 멋있는 이미지를 서버에서 만들었다 해도, 다수의 접속자가 쾌적하게 그 이미지를 볼수 있어야 한다. 그런 의미에서 performance 중심 위주로 기술하려고 한다. 예시 프로젝트 소개 아래와 같은 1~9까지의 이미지 조각들을 읽어서(image decoding), 각 조각 이미지를 BufferedImage를 이용하여 합친뒤, 합친 이미지를 아래와 같이 png로 변환(image...