아직 모자란 부분이 많지만, Spring 을 시작하기 전에 앞서 그동안 학습했고 정리했던 개념들을 다시 한번 돌이켜보고
이를 기반으로 Spring을 진행할 때의 이해도를 갖춰 나아가고자 한다.
💡 생성자
- 생성자란 클래스로 어떻게 객체를 만들 것인가를 정의한 방법
// 클래스 정의 - 틀, 설계도
public class Bread {
String name; // 빵의 이름
int calorie; // 빵의 칼로리
// 생성자 정의 - 어떻게 결과물을 만들 것인가에 대한 방법을 '강제'
public Bread(String name, int calorie) {
this.name = name;
this.calorie = calorie;
}
}
위와 같은 생성자의 파라미터인 String name, int calorie 로만 빵을 만들 수 있다는 정의를 내림
👉 생성자는 틀(=클래스)로 어떻게 결과물(=객체)를 만들 것인가에 대한 방법을 강제하는 것
생성자를 이용해 객체를 만들게 되면
public class Main {
public static void main(String[] args) {
Bread newBread = new Bread("모닝빵", 200);
System.out.println(newBread.name);
}
}
👉 객체를 만들 때에는 new 키워드를 사용해 만들어야 함을 잊지 말 것
⭐️ static은 꼭 필요한 곳에 알고 사용하는 것이 중요!
💡 프로그래밍 명명 규칙
가장 기본이지만 놓치기 쉬운, 그리고 손에 익게끔 연습해야 하는 프로그래밍 명명 규칙이 있다.
- kebab-case
- 문자와 문자 사이를 - 대시로 이어준다
- 모든 단어는 소문자이다
- PascalCase
- 대부분의 프로그래밍 언어에서 클래스 이름을 지정하는 데 파스칼 케이스가 사용된다.
- 문자의 처음 시작을 대문자로 한다.
- 문자와 문자 사이를 대문자로 이어준다.
▶️ Java에서 클래스 이름을 지정할 때 사용
- camelCase
- Java, JavaScript, TypeScript에서는 변수, 함수, 메서드 이름을 만들 때 사용한다.
- 문자와 문자 사이를 대문자로 이어준다.
▶️ Java에서 변수, 함수, 메서드 이름을 지정할 때 사용
- snake_acse
- Python이나 DB Table, Column에 사용된다.
- 문자와 문자 사이를 _ 언더바로 이어준다.
- 모든 단어는 소문자이거나 대문자이다.
💡 JSON과 XML
- JSON : 클라이언트와 서버가 통신할 때 사용하는 데이터 양식
클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어 줌 - JSON은 Key 와 Value로 이루어진 데이터를 정리하는 방식
{
"이름": "홍길동",
"나이": 30,
"사는곳": "서울",
"개발자인가": true
}
// Key는 이름, 나이 사는곳, 개발자인가
// Valuesms 홍길동, 30, 서울, true
- Value는 또 다른 Key/Value가 될 수 있음!
{
"이름": "홍길동",
"나이": 30,
"사는곳": {
"시": "서울시",
"구": "강남구",
"동": "대치동"
}
"개발자인가": true
}
- XML : 웹 초기시절부터 사용된 여러 요소로 단점을 보완해 나온 것이 JSON
💡 라이브러리(Library)
- 라이브러리 : 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음을 의미
- 👍 장점
- 개발자가 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아짐
- 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장됨
- 👎 단점
- 라이브러리가 업데이트 되지 않거나 지원이 중단될 경우 문제가 발생할 수 있음
- 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생할 수 있음
- 생각보다 빈번하게 발생
- 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적
- 라이브러리 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있음
- 👍 장점
💡 프레임워크(Framework)
- 프레임워크 : 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경
프레임워크는 frame(틀) work(일하다)의 합성어로 일하기 위한 틀을 의미, 개발자는 해당 틀 안에서 개발해야 함- 👍 장점
- 개발 프로젝트에 일관된 구조를 제공하여 코드의 일관성과 가독성을 높여주며 팀 협업이 편해짐
- 기본적으로 필요한 기능과 도구를 제공하여 개발자들이 핵심 비즈니스 로직에 집중할 수 있음
- 보안 관련 기능을 기본적으로 제공하여, 보안 취약점을 방지하는데 도움을 줌
- 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행할 수 있음
- 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받으며 다양한 문서를 활용할 수 있음
- 👎 단점
- 프레임워크는 굉장히 복잡한 구조를 가지기 때문에, 처음 익히는 데 시간이 많이 소요됨
- 프레임워크의 새로운 버전이 기존 코드와 호환되지 않을 수 있음
- 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려울 수 있음
- 👍 장점
👉 Spring 프레임워크는 Java 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크를 말함.
- Spring은 복잡한 엔터프라이즈급 애플리케이션 개발을 보다 쉽고 효율적으로 할 수 있도록 강력하고 포괄적인 기능을 제공
- 개발자는 Spring을 사용하여 비즈니스 로직에 더 집중할 수 있고, 인프라나 기술적인 복잡성은 Spring이 대신 처리하도록 할 수 있음
💡 API 개념
- API(Application Programming Interface) : 프로그램끼리 대화하는 방법을 의미이며 인터페이스임을 잊지 말 것!
- 인터페이스를 사용하게 되면 사용자는 내부 구현을 몰라도 사용하는데에 전혀 지장이 없음. 제공되는 데이터만 올바르게 잘 활용하기만 하면 되는 것
💡 RESTful API
- REST는 어떻게 서버 구현을 알지 못하는 클라이언트가 API를 잘 이용할 수 있을지에 대한 고민의 결과
- 반드시 지켜야 하는 규칙은 아니지만 권장사항의 개념
🖇️ RESTful API의 디자인 원칙
- 동사보단 명사를, 단수보단 복수를
❌ /memberget/item/hello
✅ /members/items - 마지막에 / 넣지 않기
❌ /members/
✅ /members - _ 대신 - 사용 + 대문자 사용하지 않기
❌ /restful_services
✅ /resful-services - 확장자 포함하지 않기(svg, png, exe 등)
❌ /image.svg
✅ /images - 계층화 하기
❌ /items/{memberId}/members/{itemId} (x)
✅ /members/{memberId}/items/{itemId}
💡 Annotation과 Lombok
- Annotation : 어노테이션은 자바 코드에 메타 데이터를 추가하여 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용됨
- Lombok 라이브러리 : 보일러 플레이트 코드를 줄여주는 라이브러리로 자동으로 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성을 높여줌
Lombok은 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성
❓보일러 플레이트 코드(Boileplate code) : getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드를 말함
🖇️ 주요 Lombok Annotation
- @Getter, @Setter
- 클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성
@Getter
@Setter
public class User {
private String name;
private int age;
/** 아래 코드를 @Getter, @Setter 어노테이션이 생성해준다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
**/
}
// 위의 코드에서 주석 부분의 메서드가 자동으로 생성됨
- @ToString
- 객체의 toString() 메서드를 자동으로 생성
- 기본적으로 클래스의 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷을 지정할 수도 있음
@ToString
public class User {
private String name;
private int age;
}
- @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
- 기본 생성자를 생성한다
- 모든 필드를 매개변수로 하는 생성자를 생성
- 필수(final) 필드만을 매개변수로 하는 생성자를 자동으로 생성
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
- @Slf4j
- 클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성
@Slf4j
public class UserService {
public void logMessage() {
log.info("This is a log message");
}
}
'Spring > 백엔드 기초' 카테고리의 다른 글
| [백엔드 기초] Filter, Spring Security (0) | 2025.10.24 |
|---|---|
| [백엔드 기초] 쿠키를 활용한 인증 인가 개념 실습 (0) | 2025.10.23 |
| [백엔드 기초] 백엔드 기초 개념정리 (0) | 2025.10.22 |
| [백엔드 기초] 기초 개념 정리하기 (0) | 2025.10.21 |
| [Spring] 스프링을 위한 기본 개념 복습 및 학습 -2 (0) | 2025.10.15 |