오늘 한 일
1. Lv2 과제를 미완성으로 제출하였다.
미완성으로 제출한 이유: 로그인 및 회원가입 API 구현 이해 부족
시도: Lv1 게시물 생성 및 조회부터 다시 만들었다.
2. 만들면서 부족한 자바 문법과 스프링 문법을 공부하였다.
생성자, Dto, Entity의 개념을 이해하였다.
[생성자] 출처: 스파르타코딩클럽 [내일배움캠프] 자료
생성자는 클래스로부터 인스턴스를 생성하는 메서드의 한 종류입니다. 클래스 내부에 정의하며, 메서드명이 클래스명과 일치해야 한다는 규칙이 있습니다.
생성자 내부에는 일반적으로 인스턴스 생성시 수행할 명령과 멤버변수의 초깃값을 설정하는 코드를 작성합니다. 여기까지 작성이 되면 인스턴스가 자동으로 생성되는 것일까요? 그렇지 않습니다. 이 부분이 생성자를 다루는 데에 있어서 가장 많이 혼동하는 부분입니다.
BankAccount account1 = new BankAccount();
클래스 내부에 정의된 생성자는 반드시 new 연산자와 함께 쓰여야 새로운 인스턴스를 생성하게 됩니다. 이렇게 생성된 인스턴스는 서로 다른 변수에 할당된 후 프로그램 내부에서 활용됩니다.
만약 클래스 내부에 생성자가 하나도 정의되어 있지 않다면 어떻게 될까요? 인스턴스를 생성할 수 없는 쓸모 없는 클래스가 된다고 생각할 수도 있습니다. 하지만 Java 컴파일러는 클래스 내부에 생성자가 정의되어 있지 않으면 public 클래스명() { } 과 같이 파라미터가 없는 생성자를 자동으로 추가하여 컴파일 합니다. 이 때 추가되는 생성자를 기본 생성자라고 합니다. 만약 파라미터가 있는 생성자를 클래스에 정의하게 되면 기본 생성자는 자동으로 생성되지 않기 때문에 직접 작성해주어야 합니다.
파라미터를 활용한 새로운 생성자를 보면 처음 접하는 this 라는 키워드가 눈에 띕니다. 이는 인스턴스 자기 자신을 가리키는 특수한 변수이며, this.bankCode = bankCode; 에서 좌측의 this.bankCode 는 생성될 인스턴스의 변수를, 우측의 bankCode 파라미터로 넘겨받아 인스턴스에 할당할 값을 나타냅니다.
public class BankAccount {
// 멤버변수
int bankCode; // 은행 코드
int accountNo; // 계좌 번호
String owner; // 예금주
int balance; // 잔액
boolean isDormant; // 휴면계좌 여부
int password; // 비밀번호
// 메서드(함수)
void inquiry() { } // 계좌 조회
void deposit() { } // 계좌 입금
void heldInDormant() { } // 휴면계좌 전환
// 기본 생성자
BankAccount() {
// 인스턴시 생성시 수행할 명령
// 인스턴스의 멤버변수 초깃값 설정
}
// 기본 생성자
BankAccount(int bankCode, int accountNo, String owner, int balance, int password) {
this.bankCode = bankCode;
this.accountNo = accountNo;
this.owner = owner;
this.balance = balance;
this.password = password;
this.isDormant = false;
}
}
[Dto]
- DTO(Data Transfer Object)는 데이터 전송 및 이동을 위해 생성되는 객체를 의미한다.
- Client에서 보내오는 데이터를 객체로 처리할 때 사용된다.
- 또한 서버의 계층간의 이동에도 사용된다.
- DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환한 후 반환할 때도 사용된다.
- Request의 데이터를 처리할 때 사용되는 객체는 RequestDto, Response를 할 때 사용되는 객체는 ResponseDto라는 이름을 붙여 DTO 클래스를 만들 수 있다
- 절대적인 규칙은 아니기 때문에 조직에 따라 규칙이 다를 수 있다.
[Entity]
- 데이터를 저장하는 클래스로 사용된다. 예) 메모 데이터를 저장하기 위해 Entity패키지에서 Memo 파일을 생성. 그렇게 되면 이 메모 파일에 메모 데이터를 저장하게 된다.
[Create, Read 구현]
- Create
- 메모 생성하기 API를 받을 수 있도록 Controller와 메서드를 생성
- Client에 데이터를 반환할 때 사용할 MemoResponseDto 클래스 생성
- Client의 요청 데이터를 받아줄 MemoRequestDto 클래스 생성
- DB에 연결 / 메모리스트
- @PostMapping 으로 메모 생성 로직 작성
- Read
- DB 역할을 하는 memoList를 조회하여 List<MemoResponseDto>로 변환한 후 반환한다.
그 외
- JSON 데이터 반환하는 방법
- 템플릿 엔진이 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 .html 파일을 찾아서 반환해준다.
- 따라서 html 파일이 아닌 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 애너테이션을 추가해줘야한다.
새앎: 생성자에 대해 막연하게만 알고 있었는데 구체적으로 생성자의 역할과 기능이 무엇인지 알 수 있었다.
익일 할일
1. 뉴스피드 제작 팀프로젝트 오티 + 역할분배 + 역할수행 + 필요한 추가 공부
2. Lv2 피드백 영상 시청 + Lv2 클론코딩하기
3. 초보자를 위한 자바 문법 컴팩트 강의를 수강예정
'TIL (Today I Learned)' 카테고리의 다른 글
TIL) Intellij 의문의 빨간줄! 항상 오류? 아니면 버그? (0) | 2023.07.04 |
---|---|
WIL)오류를 인정하고 해결하자. 오류가 있다는 것은 얼마나 기쁜 일인가! (0) | 2023.07.02 |
TIL) 개인과제를 진행하며 깨달은 부족한 점 (0) | 2023.06.29 |
TIL) HttpMediaTypeNotSupportedException: Content-Type 'text/plain;charset=UTF-8' is not supported] (0) | 2023.06.27 |
TIL) Spring에서 Error creating bean with name 에러 발생! (0) | 2023.06.26 |