전체 글
-
item 6 불필요한 객체 생성을 피하라책/이펙티브 자바 2022. 2. 16. 09:01
ITEM 6 불필요한 객체 생성을 피하라 같은 기능의 객체라면 매번 생성 하는것 보다는 객체를 재사용 하자 객체 재사용은 성능상 이점을 가져다준다 안좋은예시 String str = new String("hello"); 위와 같은 코드는 실행시 매번 hello 라는 값을 가진 인스턴스를 새로 만들게 된다 인자로 들어가는 hello는 이미 만들려고 하는것 그 자체이다 전혀 쓸데 없는 행위이다 개수가 많아진다면 그만큼 쓸데없는 String 인스턴스가 생길것이다 좋은예시 String str = "hello"; 위의 코드는 첫번째 예시와 같은 결과를 도출한다 위의 코드는 인스턴스를 한번만 생성하고 재사용 하기 때문에 불필요한 인스턴스에 생성을 방지한다 또한 위의 코드는 같은 가상머신 내에서 이러한 문자열 리터럴을..
-
item 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라책/이펙티브 자바 2022. 2. 15. 20:51
ITEM 5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 자원을 코드에 직접 명시하지 말자 java로 개발을 하다 보면 많은 클래스가 여러개의 자원에 의존하게 된다 이런 경우 의존성을 코드에 명시하게 되면 클라이언트와 의존성이 강하게 결합된다 유연하지 않은 코드가 되며 테스트도 어려워진다 정적 유틸리티를 잘못 사용한 예제이다 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴을..
-
10950 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.PS/백준 2022. 2. 15. 19:54
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(buf.readLine()); for(int i = 0; i < n; i++) { String line = buf.readLine(); String[] ..
-
2558 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.(줄 바꿔서 입력)PS/백준 2022. 2. 14. 21:39
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { //두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.(줄 바꿔서 입력) BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int firstVal = Integer.parseInt(br.readLine()); int secondVal = Integer.parseInt(br.readLine());..
-
1000 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.(한줄로 입력)PS/백준 2022. 2. 14. 21:38
import java.util.Scanner; public class Main { public static void main(String[] args) { //두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.(한줄로 입력) Scanner scan = new Scanner(System.in); int firstVal = scan.nextInt(); int secondVal = scan.nextInt(); System.out.print(firstVal + secondVal); } }
-
item 4 인스턴스화를 막으려거든 private 생성자를 사용하라책/이펙티브 자바 2022. 2. 14. 18:10
ITEM 4 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 정저 필드만이 있는 클래스가 있다 인스턴스를 생성하지 못하게 해야되는 클래스가 필요한 경우가 있다 ex) 배열 관련 메서드를 모아놓은 클래스 java.util.Arrays public class Arrays { private static final int MIN_ARRAY_SORT_GRAN = 1 toIndex) { throw new IllegalArgumentException( "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); } if (fromIndex < 0) { throw new ArrayIndexOutOfBoundsException(fromIndex); } ..
-
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 후기기타/이것저것 2022. 2. 13. 23:59
강의를 본지는 좀 됐지만 공부 기록을 남기기 위해 김영한님의 Spring MVC 1편 강의를 보고 느꼈던 점을 간략하게 기록한다. 강의는 간단하게 웹 애플리케이션에 관하여 설명하는 내용으로 시작한다. 간단한 설명이 끝난 뒤 서블릿으로 기본적인 웹 서버를 만들어봤는데 서블릿으로 개발하는건 되게 오랜만이라 새로웠고 이렇게 예전에 사용하던 기술부터 지금 사용하던 기술까지 어떤점을 개선 시켰는지 알 수 있게 의도한 점이 마음에 들었다. 서블릿으로 구현이 끝난 뒤 jsp와 mvc 패턴을 사용하며 얼마나 편리해지고 코드를 유지보수하기가 좋아졌는지 확인 시켜 준다 그 다음 이 강의에 핵심이라고 생각되는 내용으로 Spring MVC 패턴과 비슷하게 직접 구현해보고 불편한 부분을 점점 개선시켜 나가는 작업을 하는데 이 ..
-
item 3 private 생성자나 열거 타입으로 싱글턴임을 보증하라책/이펙티브 자바 2022. 2. 11. 22:17
ITEM 3 private 생성자나 열거타입으로 싱글턴임을 보증하라 싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스 함수와 같은 무상태 객체, 유일해야 하는 시스템 컴포넌트 등 mock 구현이 안되기 때문에 클라이언트 테스트가 어려울수있다 장점 객체를 한번만 생성 후 재사용 하기 때문에 메모리 낭비를 방지할 수 있고 다른 객체와 공유도 가능하다단점 인터페이스로 만든 후 해당 인터페이스를 구현한 싱글턴이 아니면 mock 구현이 안되기 때문에 클라이언트 테스트가 어렵다 싱글턴 생성 방식 public static final 필드 public class Foo { public static final Foo INSTANCE = new Foo(); private Foo() {} public void getPr..
-
item 2 생성자에 매개변수가 많다면 빌더를 고려하라책/이펙티브 자바 2022. 2. 10. 20:47
ITEM 2 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩터리 패턴과 생성자는 매개변수가 많을 때 가독성이 떨어지게 된다 이럴때 점층적 생성자 패턴, 자바 빈즈 패턴, 빌더 패턴을 사용해보자 점층적 생성자 패턴 public class Foo { private String userName; //필수값 private int age; //필수값 private String address; //필수값 private String tel; //선택값 public Foo(String userName) { this.userName = userName; } public Foo(String userName, int age) { this.userName = userName; this.age = age; } public ..