클론코딩을 하거나, 인강을 듣거나, 테스트케이스로 알맞은 로직인지 확인할 때 Builder패턴을 많이 사용하는 것을 봤다. 언뜻보면 생성자와 다른 점이 보이지 않았고, 필드 값이 적으면 Setter메서드를 사용하면 되는데 왜 Builder패턴을 강조하면서 이야기 할까? 그래서 Builder패턴에 대해서 알아보았다. 1. 자바빈즈 패턴 우리는 대부분 개발을 할 때, 객체 생성 후 내부 변수 세팅을 위해서 Setter메서드를 호출하는 방법을 쓰고 있다. setter 메서드로 객체 필드 값을 초기화 하는 방법을 자바빈즈 패턴 이라고 한다. 그런데 변수 갯수가 많은 경우는 어떨까 ? 아래코드는 회원의 정보를 나타내는 클래스와 setter로 객체를 초기화 시키는 방법이다. @Data public class Mem..
학교 네트워크 프로그래밍 실습 수업이나 인강을 들을 때 원하는 로직을 짜고 빨간줄이 그어져있는 구문에 try-catch문이나 메서드에 throws를 날려줌으로써 예외처리를 하는 것을 많이 봤다. 하지만 이해가 되지 않았다. 예외 처리의 정의는 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것인데, 그럼 처음부터 빨간줄이 그어져있을 때 정상적으로 작동하는 로직으로 다시 바꾸면 되지 않나? 라고 생각했다. 내 말은 모든 경우의 수(혹시 모를 오류)를 대비하는 것 보단 처음부터 완성된 로직을 짜면 되지 않을까 ? 라는 생각이었다.(여기서 말하는 오류는 RuntimeException클래스들 이다) 하지만 책을 조금만 읽어봐도 내 의문에 대한 답을 찾을 수 있었다. 오늘은 예..
1. 추상클래스란 ? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라 미완성 메서드(추상메서드)를 포함하고 있다는 의미이다. 추상클래스는 인스턴스를 생성할 수 없으며, 상속을 통해 자손클래스에 의해서만 완성될 수 있다. 한마디로 일반클래스에서 추상메서드를 포함한 클래스를 추상클래스로 부른다. 추상클래스는 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서의 중요한 의미를 갖는다. 아무것도 없는 상태에서 새로운 클래스를 만드는 것보다는 어느 정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다. 2. 추상 클래스 작성 방법 추상클래스는 abstract를 붙이기만 하면 된다. 이렇게 함으로써 이 클래스를 사용하려..
객체지향개념에서 중요한 특징 중 하나인 다형성에 대해서 알아보겠다. 다형성은 상속과 깊은 관계가 있어 상속에 대해 충분히 알고 있어야 한다. 1. 다형성이란 ? 프로그램적으로 말하자면 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것이다. 2. 다형성의 조건 사실 다형성에 조건은 없지만 허용되는 것과 허용되지 않는 것들이 있다. 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다. 자손 타입의 참조변수로 조상타입의 인스턴스를 참조할 수 없다. 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다. 이 세가지는 알고보면 다 같은 말이다. 참조변수가 사용하는 멤버의 개수가 인스턴스 멤버 개수보다 많다고 했을 때, 인스턴스 멤버에는 존재하지 ..
1. 오버로딩이란 ? 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩' 또는 간단히 '오버로딩'이라고 한다. 2. 오버로딩의 조건 같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니다. 오버로딩이 성립하기 위해서는 다음과 같은 조건을 만족해야한다. 메서드 이름이 같아야 한다. 매개변수의 개수 또는 타입이 달라야 한다. 위의 조건을 만족하지 못한 메서드는 중복으로 컴파일 에러가 발생한다. 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 아무런 영향을 주지 못한다. 간단히 말하면 이름은 같지만 매개변수가 다르면 된다. 3. 오버로딩의 예 오버로딩의 예로 가장 대표적인 것이 println메서드이다. 지금까지 아무런 생각없이 출력으로만 써왔다..
자바를 공부하고 스프링으로 넘어갈 때, 스프링에서 나오는 자바 문법과 개념에 대해서 한번 더 확실하게 정리를 하면 기억에 잘 남을거 같아 적는다. 자바 문법은 다 안다고 치고 객체지향부터 알아보겠다. 이 글을 보면서 부가적인 내용들도 중요하지만 단어의 의미에 좀 더 집중해서 봤으면 한다. 1. 객체지향 언어 란 ? 객체지향이란 말은 많이 들어봤으나 의미를 말하려 하면 생각이 나지 않는 경우가 많다. 객체지향언어는 완전히 새로운 프로그래밍이 아니라, 기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 형태이다. 이러한 규칙을 이용해서 코드 간의 서로 관계를 맺어 유기적으로 프로그램을 구성하는 것이 가능하다. 객체지향언어의 주요 특징은 다음과 같다. 1-1. 코드의 재사용성이 높다. 새로운 코드를 작성할 ..
자동으로 의존관계를 설정할 수 있지만, 직접 스프링 빈으로 등록하는 방법이 있다. 파일을 한개 만들고 아래와 같이 코드를 작성한다. @Configuration public class SpringConfig { @Bean public MemberService memberService() { return new MemberService(); } } public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } 이렇게 작성하면 스프링이 Configurat..
회원 서비스를 구현하는 과정에서 생긴 문제이다. public class MemberSerivce() { private final MemberRepository memberRepository = new MemoryMemberRepository(); } class MemberServiceTest { MemberService memberService = new MemberService(); MemoryMemberRepository memberRepository = new MemoryMemberRepository; } (개발자가 new를 사용하여 필요한 객체를 직접 주입함) 위의 코드를 보면 MemberService에서 생성한 MemoryMemberRepository객체와 Test에서의 MemoryMemberR..
이 부분은 영속성 컨텍스트에 관한 글을 보고 오면 더 이해가 가기 쉽다. 영속성 컨텍스트는 엔티티를 식별자 값으로 구분하므로 엔티티를 영속 상태로 만들려면 식별자 값이 반드시 있어야 한다. 식별자를 할당하는 다양한 전략이 있다. 그 중 많이 쓰는 2가지 전략을 알아보겠다. 1. 기본키 직접 할당 전략 기본 키를 직접 할당하려면 @Id로 매핑시키면 된다. @Id @Column(name="id") private String id; 직접 할당하는 방법은 em.persist() 로 엔티티를 저장하기 전에 에플리케이션에서 기본 키를 직접 할당하는 방법이다. Member member = new Member(); member.setAge(18); //직접 할당 em.persist(board); 2. IDENTITY ..
1. 영속성 컨텍스트 란 ? 눈에 보이지 않는 논리적인 개념 EntityManager을 사용하여 DB에 바로 접근하는 것이 아닌, 영속성 컨텍스트에 접근하여 저장, 삭제 등 가능 2. 엔티티의 생명주기 비영속: 객체가 영속성 컨텍스트와 관련이 없는 상태 public void data() { Member member = new Member(); } 영속: 객체가 영속성 컨텍스트에 의해 관리되고 있는 상태. 아래와 같이 EntityManager을 통해 저장시킨 상태 @PersistenceContext //Entity를 영구저장하는 환경을 만듬 private EntityManager em; //EntityManager 선언 public void data() { Member member = new Member(..
- Total
- Today
- Yesterday