목록JAVA (65)
개발 기록
(7) 다 쓴 객체 참조를 해제하라 가비지 컬렉터가 있더라도 메모리 관리에 신경써야 함! *메모리 누수* 가비지 컬렉션 언어에서는 메모리 누수를 찾기가 어려움.객체 참조를 하나 살려두면 그 객체 + 그 객체가 참조하는 모든 객체 +.. 를 회수 하지 못 함. 해법! 1. 해당 참조를 다 썼을 때 null 처리 (참조 해제)**예외적인 경우에 사용 : 자기 메모리를 직접 관리하는 클래스일때ex. 스택 클래스에서 pop 메서드를 제대로 구현 (꺼낸 객체는 참조가 더 이상 필요 없음)public Object pop() { if (size = 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = nul..
(6) 불필요한 객체 생성을 피하라 1. String s = new String("bikini"); -> String s = "bikini";- new String 은 실행될 때 마다 String 인스턴스를 새로 만든다.- 개선된 코드는 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용함.- jvm에서는 문자열을 캐싱한다.자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어 있다. name1과 name2 변수가 동일한 문자열 리터럴을 참조할 경우 name1과 name2는 동일한 String 객체를 참조하게 된다출처: https://woonys.tistory.com/221 [WOONY's 인사이트:티스토리]Java의 Heap에는 String Pool 이라는 특별한 영역에서 ..
(4) 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정적 필드만을 담은 클래스는 인스턴스로 만들어 사용하려는 클래스가 아님.- 생성자를 명시하지 않을 경우 컴파일러가 자동으로 기본 생성자를 만들어줌- 이때는 private 생성자를 추가하면 클래스의 인스턴스화 막을 수 있음public class UtilityClass { // 인스턴스화 방지용 private Utilityclass() { throw new AssertionError(); }}- 클래스 안에서 실수라도 생성자 호출을 막기위해 error 를 던져도 좋음- 하지만 생성자를 호출하지 않는 코드라 한번에 이해가 어려우니 주석을 달자.- 상속 불가능. (5) 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 클래스가 내..
(3) private 생성자나 열거 타입으로 싱글턴임을 보증하라 *싱글턴 : 인스턴스를 오직 하나만 생성할 수 있는 클래스싱글턴 인스턴스는 가짜 구현으로 대체할 수 없기 때문에 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다.(타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든게 아니라면.) 보통 싱글턴을 만드는 방식.1. public static final 필드 방식의 싱글턴public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ... }}장점 : 간결함, 해당 클래스가 싱글턴임이 API에 명백히 드러난다. 2..
base 64 디코딩 중 발생한 에러.base 64 문자열에 유효하지 않은 문자열이 포함되어 있어서 발생하는 것으로 알고 있는데 character 20가 뭔지는 알기 어려웠다. base64 라이브러리를 보면 20은 16진수이다. HEX가 16진수코드이고 20은 Space라는 걸 알 수 있다!실제로 문자열에 공백이 포함되어 있어 디코딩 오류가 났다.
- 생성자에 매개변수가 많다면 빌더를 고려하라 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 것이 좋다. 선택적 매개변수가 많은 클래스의 생성자 혹은 정적 팩터리 패턴 3가지 1. 점층적 생성자 패턴받는 매개변수 개수에 따라 생성자를 여러개 만든다.(-)코드 작성시 매개변수의 의미나 개수가 헷갈려서 실수 할 수 있다. 읽기도 어렵다.Test t = new Test(240, 8, 100, 0, 35, 27); 2. 자바빈즈 패턴매개변수가 없는 생성자로 객체를 만든 후, 세터(setter) 메서드들을 호출해 원하는 매개변수의 값을 설정한다.(+)인스턴스 만들기가 쉽고 읽기 쉽다.(-) 객체 하나를 만들기 위해서는 세터 메서드를 여러개 호출해야한다. 객체 생성 코드와 값을 설정하는..
- 생성자 대신 정적 팩터리 메서드를 고려하라 클래스의 인스턴스를 얻는 기법에는 public 생성자도 있지만 생성자와 별도로 정적 팩터리 메서드도 사용 가능 장점1. 이름을 가질 수 있다.- 반환될 객체의 특성에 맞게 이름 짓기 가능- 생성자와 달리 개수 제약 없이 생성 가능 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.- 같은 객체가 자주 요청되는 상황에서 사용 가능ex. 생성자로 인스턴스를 미리 만들어 놓고(private), 외부에서 인스턴스 사용시에는 정적 팩터리 메서드를 통하여 가져와 사용. 이렇게 되면 항상 같은 인스턴스를 반환. 인스턴스 통제가 가능해짐.\ 3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.4. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할..
https://jmseo.tistory.com/entry/Java-SFTP-Util-sftp-%EC%97%85%EB%A1%9C%EB%93%9C-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EC%98%88%EC%A0%9C-jsch [Java] SFTP 파일 업로드, 다운로드 예제 (jsch)이전에 K사와 sftp 송수신으로 가맹점정보 파일을 다운로드, 결제정보를 업로드하여 파일처리하는 업무를 하며 개발했던 소스를 포스팅한당.. 앞서 jsch 라이브러리를 사용하면 쉽게 SFTP 서버 접jmseo.tistory.com SFTPHelper.java (연결, 종료, 파일 업로드, 삭제)@Log4j2@Componentclass SFTPHelper { private Session sess..