IDE : Integrated development Environment
: 하나의 프로그램에서 구현부터 실행까지 통합한 환경
예. 인텔리제이, 이클립스
코딩할 때 줄임말써도 될까? 안될까?
genymdhms() = generateDateTime()
//yyyymmdd
📍클린코드
1. 말을 줄이지 않는다.
2. 가독성만 괜찮다면 길어도 상관 X
3. 보편적인 약어는 사용 O ( args, tmp, sys, arr, num … )
4. 주석을 적게 사용
- 주석 사용 이유: 코드를 이해하기 힘들어서
cf. 패턴(yyyymmdd) 표시할 때, 규칙/법 번호 참고해야할 때
5. 메소드로 추출 ! (extract method)
6. 부정보단 긍정으로 (메소드 이름 설정/반복문 조건) !
클린코드로 코드 수정해보기
if (date.before(SUMMER_START) || date.after(SUMMER_END))
// 여름이 아니면
charge = basePrice * WINTER_RATE;
// 겨울 비용을 내기
else
// 여름이면
charge = basePrice * SUMMER_RATE + SERVICE_CHARGE;
//여름 비용을 내라
내가 메소드를 수정해본 것:
String NotSummer() { return date.before(SUMMER_START) || date.after(SUMMER_END); }
메소드 이름 짓는 방법
(1) foodSelect
(2) selectFood >> 동사를 먼저 적기
: 메소드는 기능에 대한 내용을 적는 것이기 때문에 동사를 먼저 적는다.
강사님과 같이 수정한 메서드
If 문은 답이 true 아니면 false이다. => boolen 타입으로 설정
public boolean isNotSummer() {
return date.before(SUMMER_START) || date.after(SUMMER_END);
}
----
수정한 메서드를 사용한 코드
if ( isNotSummer() )
charge = basePrice * WINTER_RATE;
// 겨울 비용을 내기
else
// 여름이면
charge = basePrice * SUMMER_RATE + SERVICE_CHARGE;
//여름 비용을 내라
>> 주석을 쓰지 않아도 잘 읽힌다.
긍정문으로 바꾸기
부정문으로 조건문을 만들면 헷갈릴 수 있다!
최대한 긍정문으로 만들어보자.
1. 메서드를 긍정으로
public boolean isSummer() {
return date.after(SUMMER_START) && date.before(SUMMER_END) ;
}
2. 조건문을 긍정으로
if ( isSummer() )
charge = basePrice * SUMMER_RATE + SERVICE_CHARGE;
//여름 비용을 내라
else
charge = basePrice * WINTER_RATE;
// 겨울 비용을 내기
한글 주석이 깨질 수 있다.
Charge 내용도 메서드화 시키자.
if ( isSummer() )
charge = getSummerCharge();
else
charge = getWinerCharge();
//----------------------------
public boolean isSummer() {
return date.after(SUMMER_START) && date.before(SUMMER_END) ;
}
Int getSummerCharge() {
return basePrice * SUMMER_RATE + SERVICE_CHARGE;
}
Int getWinerCharge() {
return basePrice * WINTER_RATE;
}
이젠 주석이 없어도, 코드의 의미를 한 눈에 해석할 수 있다.
변수명 지어보기
'비밀번호를 최근에 바꾼 날짜부터 오늘까지 차이 일 수'의 의미를 가진 변수명을 지어보자
📍앞에 구하려는 것부터 적는다 : days
Int daysSincePasswordChanged;
로버트 C. 마틴
C++, 자바, 객체지향, SOLID, 클린코드, 디자인 패턴, UML, 애자일 방법론 등을 만들었다.
>> 정답은 없다. 객체지향의 특징을 활용해서 코드를 짜자.
클린 코드의 정의
“유지보수하기 쉽게” 코드를 짜는 것
협업이 가능, 잘 알아볼 수 있고, 가독성..
+ 성능
+ 안정성, 신뢰성을 확보
+ 언어의 특징을 살림
+ 성능에 대한 고찰
인스타 팔로워가 많은 인플루언서가 글을 작성해서, 1억명에서 알림을 보내야 한다. 이 때 어떻게 처리할 것인가?
실제로 인플루언서의 글 알림은 긴급알림으로 뜬다.
(그 알림을 다르게 분류(알림을 바로 보내지 않거나 글을 바로 업로드하지 않음)한다는 의미이다.)
1. 평소에는 스탠바이 상태를 유지한다.
( 인플루언서가 글을 업로드했다. )
2. 알림을 바로 보내지 않고 대기한다.
3. 대기하는 시간동안 순차적으로 서버를 모두 킨다.
4. 대용량의 서버로 알림을 모두 전송한다.
1억명이 동시에 접속하더라도 문제가 없을 환경을 일정 시간동안 만들고 유지시킨다.
+ 안정성, 신뢰성을 확보에 대한 고찰
=> 예외처리로 안정성과 신뢰를 확보한다.
(예시) 회원가입페이지에서 숫자를 넣었을 때 아무 반응없이 흰 페이지만 뜬다.
이 경우에 사용자들은 안정적이지 않다고 느끼고 신뢰를 잃을 것이다.
>> 예외 처리로 개발자들은 이 상황을 예방할 수 있다.
예외 처리
예외처리 문법
try – catch, throw, throws => NPE (null pointer exception)
if문도 예외처리를 할 수 있다. If(member==null)
면접 질문
안정성을 어떻게 추구하나 -> 예외처리로 안정성 유지
예외 vs 에러
예외 : 개발자가 놓친 것 (실수나 사용자가 잘못 넣은 것)
에러 : 개발자 탓X (JVM을 사용할 수 없는 경우 등)
사용자 만족도는 중요하다
개발자 입장에서 어떤걸 지향해야 하는지 고민해보자.
백엔드에서 사용자 경험을 중시하는 개발자란 무엇일까?
→ 예외처리를 잘하는 개발자 (서버가 터지지 않게 개발)
→ 성능적으로 고민하는 개발자
→ 기획자의 마인드로 사용자 입장에서 ‘왜?’를 생각하는 개발자
엘리베이터의 속도를 빠르게 하면 위험해진다. 속도를 빠르게 할 수 없으니 체감속도를 줄일 장치로 엘리베이터에 거울을 넣는다.
NPE (Null Pointer Exception)
: null을 가지고 있는 객체/변수를 호출할 때 발생하는 에러
Null Pointer Exception에서 Pointer는 어떤 의미를 가지고 있을까?
- 그 의미를 이해하려면 메모리 구조를 먼저 알아야 한다!
메모리 영역 구조
메모리의 영역은 스택처럼 쌓여있다.
스택 영역 : 상자의 부피는 일정하다. 쌓아서 관리한다.
모두 쌓아서 관리하는 것은 안정적이지 않기 때문에(String의 값과 int의 값은 무게가 다르다.) 메모리 영역을 나눠서 관리한다.
메모리 영역은 '쌓는 곳'과 '더미로 관리하는 곳'이 나눠져 있다.
=> 쌓아서 관리하는 곳: 스택 영역
=> 더미로 관리하는 곳: 힙 영역 (더미에서 찾고 빼기가 쉬움. / 트리처럼 생김. 찾아가기 쉬움.)
메모리 영역을 나누게 되면 발생하는 문제점
- 선택도 해야하고 갔는데 없을 수 있음. 시간이 오래걸리고 비효율적일 수 있다.
[ 해결 방법 ]
- 무조건 왼쪽(스택 영역)부터 가라고 시킴.
- 왼쪽엔 값 또는 주소가 담겨 있어, 문제점이 해결된다.
null pointer 는 주소를 가리켜서 갔는데 null(값이 없음)인 경우를 뜻한다.
[ 메모리 영역 구조와 널 포인터 요약 ]
메모리는 영역이 두 개로 나뉘어짐. 스택영역/힙 영역
기본 자료형: 스택 영역
String : 힙에 살고 스택에 가리킴
객체가 생성되면 어느 영역에 올라갈까-> 힙에 살고 스택에서 가리킴
널 포인터: 스택이 힙을 가르키는데 아무것도 없음
'패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기' 카테고리의 다른 글
비기너반 강의 복습 6 | 백엔드 계층 구조: Controller, Service, DAO | 보안(객체 분리): DTO(프론트)/Entity(DB) (0) | 2025.02.10 |
---|---|
비기너반 강의 복습 5 | 객체 생성, 메서드 내부 객체 생성 문제, 데이터베이스 (1) | 2025.02.09 |
SQL 예제 풀기 | CREATE, INSERT, UPDATE, DELETE (0) | 2025.01.23 |
SQL 개념 공부 | CREATE, INSERT, UPDATE, DELETE, DISTINCT, ORDER BY, WHERE (1) | 2025.01.23 |
[macOS SQL 세팅하기] Oracle DB & SQL Developer설치 | 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.01.23 |