JAVA
객체의 생성과 삭제 - 규칙 7 종료자 사용을 피하라
일반적으로 자주 사용하는 finalizer는 예측 불가능하며, 대체로 위험하고, 불필요하다. 그렇기에 꼭 필요로 하는 작업을 명시할 때에는, 사용해서는 안 된다. 문제 사항 1. final 문장에서 Exception이 발생하였을 경우에 하단에 기재한 문장이 실행되지 않아 결국 문제를 유발할 수도 있다. 123456789try { file = new FileWriter(new File("/test/tt"));} catch (IOException ex) { System.out.println("catch block");} finally { System.out.println(12/0); // 강제로 Exception을 발생시킨다. 하단에 file.close() 문장은 실행되지 않는다. file.close(); ..
객체의 생성과 삭제 - 규칙 6 유효기간이 지난 객체 참조는 페기하라.
Java는 GC가 있어 C나 C++처럼 순수 메모리 관리를 해주지 않아도 돼서 메모리 관리를 대부분 하지 않는다. 그러나 더 이상 참조하지 않는 객체에 대해 reference를 제거하지 않는 경우에는 어떠한 경우에도 메모리 누수가 발생되게 된다. 이런 reference는 단순하게 null 처리를 해줌으로써 해제된 참조를 해제 할 수 있다. Null로 바꾸게 되면, GC가 해당 객체를 해제할 수 있는 객체라 생각하고 반환해버린다. 하지만 이런 객체참조를 null로 처리하는 것은 규범이라기보다는 예외적인 조치가 되어야 한다. 그렇다면 이런 만기참조를 해결하는데 좋은 방법이 어떤 것인가? 가장 좋은 방법은 해당 참조가 보관된 변수가 유효범위(scope)를 벗어나게 하는 것이다. 또한 캐시(cache)도 메모리..
객체의 생성과 삭제 - 규칙 5 불필요한 객체는 만들지 말라
기능적으로 동일한 객체는 필요할 때 마다 만들지 않고 재 사용하는 것이 더욱 효율적이다. 사례 1. new String("str") 보다 "str"을 사용하라. 반복문 속에서 String 문장을 사용해야 할 때 new String("test")를 통해서 객체를 새로 생성하는 것이 아니라, "test"와 같이 그 자체가 String 객체인 문장을 사용하는 것이 좋다. 그 이유는 다음과 같다.(출처 : http://blog.vjvj.net/2017/04/effective-java-5.html) 두 가지 경우 모두 생성 시 heap 메모리에 객체가 생성된다. 하지만 "test"와 같이 String 객체를 만드는 경우에는 heap에 String Constant Pool영역에 생성된다. 그래서 사용자가 "test..
객체의 생성과 삭제 - 규칙 4 객체 생성을 막을 때는 private 생성자를 사용하라.
객체 생성을 막기위해서는 Abstract Class를 이용하거나, 생성자를 private로 생성하면 막을 수 있다. 하지만 이렇게 객체 생성을 막는다는 것은 객체지향 개념에서 벗어나는 행위일 수 있다. 하지만 다음과 같은 경우에 사용을 위해서 사용되기도 한다. 1. 자바의 기본 자료형 값(primitive value) 또는 배열에 적용되는 메서드를 한 군대에 모아둘 때 유용하다. -> Util성 성질을 가지는 클래스에서 유용 Ex) java.lang.Math, java.lang.Arrays Math.abs(), Math.cos() Arrays.asList() 2. 규칙 1번에서 사용하는 정적 메서드를 모아놓을 때도 사용할 수 있다. Ex) java.util.Collections Collections.em..
객체의 생성과 삭제 - 규칙 3 private 생성자나 enum 자료형은 싱글톤 패턴을 따르도록 설계하라.
1234567891011121314package practice; public class SingleTone {public static SingleTone INSTANCE; public static synchronized SingleTone getInstance() {if ( INSTANCE == null ) {INSTANCE = new SingleTone();}return INSTANCE;} private SingleTone() {}}Colored by Color Scriptercs 기존에 싱글톤 패턴을 사용할 때 다음과 같이 생성해 주었다. 하지만 이런 형태로 만들 시 private 생성자를 생성하였다 해도 java reflection 성질을 이용하여 객체를 생성 할 수있다. 그리고 INSTANCE ..
객체의 생성과 삭제 - 규칙 2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라
기존의 생성자로 많은 인자를 넣어 생성자를 추가하려고 하는 경우에는 다음과 같이 점층적 생성자 패턴을 자주 사용한다. 1234567891011121314151617181920점층적 생성자 패턴public class Wedul { private String teamName; private String teamReader; private int memberCnt; public Wedul(String teamName) { this(teamName, "", 0); } public Wedul(String teamName, String teamReader) { this(teamName, teamReader, 0); } public Wedul(String teamName, String teamReader, int m..
정렬알고리즘 - 버블정렬
1234567891011121314151617for(int i = money.length; i>0; i--){ for(int j=0;jmoney[j+1]){ temp=money[j]; money[j]=money[j+1]; money[j+1]=temp; } } }Colored by Color Scriptercs
10진수 2진수 변환
1234567891011121314151617181920212223242526272829303132package java8; import java.util.Scanner; public class MainClass { public static void main(String args[]) { Scanner in = new Scanner(System.in); StringBuilder result = new StringBuilder(); int input; System.out.print("10진수를 입력하세요. : "); input = in.nextInt(); //10 -> 2진수 while (input != 1) { result.insert(0, String.valueOf(input % 2)); input =..