본문 바로가기

JAVA

(7)
SSAFY 친구들과 함께 한 TDD 스터디 후기 느낀점 주어진 미션을 하나씩 수행하면서 코드 리뷰를 통해 객체 지향의 장점에 대해 정말 체감할 수 있었던 스터디였습니다. 가장 처음으로 진행한 문자열 테스트 미션에서도 싱글톤에 대한 개념에 대해 깊이 있게 학습하면서 TDD 스터디이지만 Java와 더 친해진것같은 스터디였습니다. 이 과정에서 객체 지향 생활 체조 원칙, ENUM, Optional 을 필수적으로 사용해야 하는 이유, OCP 적용하기, 전략 패턴, 일급 컬렉션에 대해 학습할 수 있었습니다. (스터디를 진행하면서 저만의 용어로 Notion에 정리를 해놓아서.. 포스팅을 못하고 있습니다ㅎㅎ 차근차근 블로그에 포스팅 할 계획입니다!) 처음부터 완벽한 코드를 짤 수 없기에, 실패하는 테스트 코드를 작성하고 차근차근 리팩토링을 진행하면서 더 나은 메소..
싱글턴(Singleton)패턴 이란? - 싱글톤 구현 방법 6가지 싱글턴(Singleton)이란? 생성자가 여러번 호출되더라도 실제로 생성되는 객체는 하나인 디자인패턴이다. 즉, 객체의 인스턴스가 오직 1개만 생성되는 패턴이다. 따라서, 어플리케이션 내에서 전역적으로 접근이 가능하다. 주의할점 상태를 가진 객체를 Singleton으로 만들면 안된다. 예를 들어, 멀티 스레드 환경에서 각기 다른 스레드가 객체의 상태를 변경시킬 가능성이 있기 때문이다. 싱글톤 패턴을 사용하는 이유? 한번의 객체 생성으로 재사용이 가능하기 때문에 메모리의 낭비를 방지할 수 있다. 주로 공통된 객체를 여러개 생성해서 사용하는 DB의 Connection Pool 에서 사용한다. 즉, 멀티 스레드 환경에서 싱글톤 객체를 공유하며 동시에 접하는 경우 동시성 문제도 해결해주는 패턴이다. 프로그램 내..
Comparable , Comparator 인터페이스 차이점 Comparable , Comparator 인터페이스는 모두 객체의 정렬과 관련된 인터페이스입니다. Comparable은 클래스 내부에 객체의 정렬 기준을 만들어 놓을 때 사용됩니다. 이 인터페이스를 구현한 객체에게 주는 한 가지 기본 정렬 규칙을 지정해 주는 것입니다. Comparator 인터페이스는 클래스 외부에 객체의 정렬기준을 만들어 놓을때 사용됩니다. Comparable이 구현된 클래스들의 기본 정렬 규칙과는 다르게, 주어진 특정 기준을 가지고 정렬 규칙을 지정하고 싶을때 사용합니다. 사용 예제 1. Comparable Comparable 인터페이스를 implements 하고 compareTo 메소드를 원하는 기준으로 오버라이드 해야합니다. public class Writer implements..
JAVA - 10진수를 2진수, 8진수로 변환하기 public class NumberConversion { public static void main(String[] args) { int n0 = Integer.parseInt("11", 10); //10진수 -> 10진수 int n1 = Integer.parseInt("11", 2); //2진수 -> 10진수 int n2 = Integer.parseInt("11", 8); //8진수 -> 10진수 System.out.printf("%d, %d\n",n1, n2); String s1 = Integer.toBinaryString(15); // int -> 2진수 String s2 = Integer.toOctalString(8); // int -> 8진수 System.out.printf("%s, %s\n",..
Collection 중복체크 - equals(), hashCode() Collections Collection 인터페이스는 모든 클래스들의 Object를 element로 저장하는 객체의 최상위 Interface 이다. 예를 들어, Collection에서 객체를 삭제하는 경우 Object Class의 equals()는 주소값을 비교하기 때문에 동일한 정보를 가진 객체를 서로 다른 객체로 판단하여 False를 반환한다. 하지만, 객체의 주소값을 비교하는것이 아닌 객체의 실제 값들을 비교하고 싶을때 equals()를 재정의하여 사용해야한다. /* 객체 p3와 p4를 동일하게 생성하고 p4를 삭제해보면 삭제가 되지 않는다*/ // 새로운 환자 등록 Patient p3 = new Patient("환자3", 33, "010-3333-3333", "고열", "001", false); ..
JVM Memory 구조 Java는 GC(Garbage Collection)라는 쓰레드를 생성하여 사용하지 않는 객체를 제거 하도록 설계하였다. 우리가 new연산자를 통해서 메모리 할당을 수행하도록 하지만, Deallocation은 JVM이 대신 수행해준다. JVM은 Heap에 만들어진 객체 중 더 이상 참조하지 않은 것들을 제거해준다. 따라서 Java 개발자들은 메모리 관리를 직접하지 않아도 된다! 개발자가 메모리 관리를 직접하진 않지만 JVM의 메모리 구조를 알아야 Java 의 특징을 잘 이해할수있다 Class Area(Method Area) : 메모리로 읽어온 클래스의 정보가 등록된다. 이때 클래스는 Class Area에 한번만 등록된다. Heap : 객체를 new 연산으로 생성하게 되면 각 객체별로 저장된다. Stack ..
Class Object Method 정리 1. Access Modifier 클래스 외부에서 클래스 내부의 멤버 변수나 메소드로의 접근을 제어하는 Keyword를 Access Modifier라고 한다. 같은 클래스 내부에서만 접근이 가능하다. -> 같은 패키지 내부에서는 private만 제외하고 모두 접근이 가능하다. default 는 같은 패키지에 속하거나 같은 클래스여야 접근이 가능하다. protected는 같은 클래스, 같은 패키지, 자손클래스에 접근이 가능하다. 상속관계가 있을때 자식클래스가 부모클래스의 protected로 접근이 가능하다. public 은 접근 제한이 전혀 없다. public > protected > default > private final 멤버필드 앞에 쓰면 값 변경이 불가능하다. 변수를 상수화 시켜주는것 메소드 앞에..