나를 기록하다
article thumbnail
[Effective Java 3/E] 7. 다 쓴 객체 참조를 해제하라
Review/Book 2023. 10. 30. 20:00

가비지 컬렉터가 있더라도 메모리 관리를 해야 한다 [예시] 스택을 간단히 구현한 코드 메모리 누수가 일어나는 위치는 어디인가? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) { throw new EmptyStackExc..

article thumbnail
[Effective Java 3/E] 6. 불필요한 객체 생성을 피해라
Review/Book 2023. 10. 30. 19:00

불필요한 객체 생성을 파하라 String s = new String("bikini"); 이 문장은 실행될 때마다 String 인스턴스를 새로 만듦 → 반복문이나 자주 호출되는 메서드 안에 있다면 쓸데없는 String 클래스가 수백만 개 만들어질 수도 있다. String s = "bikini"; 이 코드는 하나의 String 인스턴스를 사용한다. 이 방식을 사용한다면 같은 가상 머신 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장된다. 생성자 대신 정적 팩토리 메서드(아이템 1)를 제공하는 불변 클래스에서는 정적 팩토리 메서드를 사용해 불필요한 객체 생성을 피할 수 있다. Boolean(String) 생성자 대신 Boolean.valueOf(String) 팩토리 메서드..

article thumbnail
[Java] private 생성자의 사용 이유, final, 자바 메모리 구조
Java 2023. 10. 25. 15:00

sonarlint의 코드리뷰 프리코스를 진행하면서 내 코드를 자동으로 리뷰해주는 IDE 확장 플러그인인 sonarlint의 도움을 많이 받았다. sonarlint는 코드에 문제가 있다고 판단되면 해당 코드에 물결표 밑줄 표시를 하고 마우스를 가져가면 해당 코드의 문제점에 대해서 설명해준다. 아래에 출력을 담당하는 GameOutput 클래스의 클래스명에 밑줄로 경고를 하는데 이유가 뭘까? 위 사진처럼 출력을 담당하는 기능을 하는 GameOutput에 따로 생성자를 만들지 않고 메서드들을 static으로 선언하여 외부 클래스에서도 GameOutput.{메서드명}과 같이 사용할 수 있도록 하였다. 이유 그런데 여기서 왜 이슈가 발생했을까? 이유는 아래에 sonarlint가 자세하게 설명해준다. 설명 설명은 다..

article thumbnail
[Effective Java 3/E] 1. 생성자 대신 정적 팩토리 메서드를 고려하라
Review/Book 2023. 10. 23. 18:00

정적 팩토리 메서드(static factory method) public 생성자 - 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단 클래스는 생성자와 별도로 그 클래스의 인스턴스를 반환하는 정적 팩터리 메서드 제공 가능 [예시] boolean 기본 타입의 박싱 클래스(boxed class)인 Boolean에서 발췌한 간단한 예 기본 타입인 boolean에서 값을 받아 Boolean 객체 참조로 변환 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 여기서 나오는 정적 팩토리 메서드는 디자인 패턴에서의 팩토리 메서드(Factory Method)와 다르다. 클래스가 클라이언트에 public 생성자 대신..

article thumbnail
[테코톡] MVC 패턴
Review/Techotalk 2023. 10. 14. 21:00

자바 MVC 패턴을 공부하면서 저번에 시청한 적이 있지만 정리를 하지 않았기에 복습 겸 우아한테크 유튜브에 올라와있는 테코톡 MVC 패턴을 시청하고 정리하려 한다. 테코톡엔 양질의 자료가 많으니 CS에 관심이 있다면 듣는 것을 추천한다. MVC는 왜 생겨난걸까? 과거의 프로그래머들은 수많은 프로그램을 만들었다. 코드가 많아질수록 복잡해져 코드가 파악하기 힘들고 기능을 수정할 때마다 대부분의 코드를 갈아엎어야 하는 경우가 많았다. 즉, 유지보수가 어려웠다. 계속 코드를 짜다보니, 특정 코드 구성에서 유지보수의 편리성을 발견했다. 이러한 규칙성을 조금씩 찾고 패턴을 공식처럼 만들어 논문으로 발표하게 됐고, 많은 프로그래머들의 사랑을 받아 오늘날의 MVC 패턴이 생겨나게 되었다. MVC는 유지보수가 편해지는 ..

article thumbnail
[Java] 익명클래스, 람다와 스트림
Java 2023. 10. 11. 23:34

익명 클래스 이름이 없는 클래스 내부 클래스 중 특별한 클래스 1회성 코드. 해당 객체 하나만을 위한 클래스 [예시] 카페에서 커피 주문. 특별한 손님을 위한 익명 클래스 public class Main { public static void main(String[] args) { //익명 클래스 Coffee c1 = new Coffee(); c1.order("아메리카노"); System.out.println("------------------------"); Coffee c2 = new Coffee(); c2.order("카페라떼"); System.out.println("------------------------"); //굉장히 친한 친구 방문 Coffee specialCoffee = new Coffe..

profile on loading

Loading...