# 궁금증 발생
김영한 spring 입문 강의를 들으면서 코드를 따라치다가 뭔가 이해가 가지 않는 코드가 있었습니다. 아직 자바를 잘 이해하지 못한 상태라 좀 깊게 파보고 이해하고 싶었습니다.
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloapi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
바로 이 코드에서 왜 "static" class Hello 를 쓰는지 이해가 가지 않았습니다. 좀 더 여러가지를 생각해보자면 클래스 내부에 클래스를 정의해서 얻을 수 있는 기능이 무엇인지, static 변수, 메서드, 클래스 각각 어떤 깊은 의미가 있는지 궁금했습니다. 그럼 아주 기초부터 차근차근 쌓아 올려보겠습니다.
# static의 기능
자바에서 static 키워드는 클래스 멤버를 정의할 때 사용됩니다. static 멤버는 인스턴스 멤버와는 달리 객체 생성 없이 클래스 이름으로 바로 접근할 수 있습니다.
# static class, method, variable
class
1. 클래스 내부에 정의되는 중첩 클래스 중 하나
2. 자신이 속한 클래스의 인스턴스 참조 금지
3. 외부 클래스의 static 메서드에서도 사용 가능
4. 내부 클래스를 별도의 클래스로 분리하고자 할 때 사용
method
1. 객체를 생성하지 않고도 호출 가능
2. 객체에 속한 인스턴스 멤버에는 접근 불가
3. 인스턴스 멤버를 사용하지 않는 경우 유틸리티 클래스에 주로 사용됩니다.
*유틸리티 클래스 : 특정 기능을 수행하는 메서드를 모아놓은 클래스 ex) 날짜계산, 파일 입출력
variable
1. 클래스의 모든 인스턴스에서 공유되는 변수
2. 값을 한 번 할당하면 모든 인스턴스에서 동일한 값을 갖습니다.
3. 상수로 사용 가능하며 자주 사용되는 값을 저장하는 데 사용
method, variable은 그래도 이해하기 쉬운데 class는 읽어도 읽어도 굳이...? 라는 의문이 듭니다... 이해도 잘 안가고.
# 내부 클래스 기능
내부 클래스는 외부 클래스의 멤버 변수와 메서드에 직접 접근할 수 있으며, 보안성을 강화하고 코드 구조를 더욱 간결하게 만드는 등의 장점이 있습니다.
# 내부 클래스 종류
1. Member Inner Class: 외부 클래스의 멤버 변수와 메서드에 직접 접근할 수 있는 내부 클래스
2. Static Inner Class: 외부 클래스의 멤버 변수와 메서드에 접근할 수 없는 내부 클래스 정적 내부 클래스는 외부 클래스의 static 멤버와 같은 방식으로 사용됩니다.
3. Local Inner Class: 메서드나 블록 내부에서 선언되는 내부 클래스. 지역 변수처럼 메서드가 실행될 때 생성되며, 메서드가 종료될 때 소멸됩니다.
4. Anonymous Inner Class: 클래스 이름이 없는 내부 클래스로, 인터페이스나 추상 클래스의 객체를 생성할 때 사용됩니다. 익명 내부 클래스는 클래스의 이름과 객체의 생성을 동시에 처리합니다.
찾아볼수록 더 이해가 안가는 마법... 아직 개발 경험이 없어서 그런것 같습니다. 나중에 이해되면 추가로 더 설명하겠습니다.
# reference
chatGPT
'Back-end > Spring 기초개념' 카테고리의 다른 글
Instagram-clone 분석 (3) DTO (0) | 2023.04.23 |
---|---|
Instagram-clone 분석 (2) entity (3) | 2023.04.22 |
Instagram-clone 분석 (1) (2) | 2023.04.19 |
@Bean과 @Component (2) | 2023.03.29 |
SOLID 5원칙 (0) | 2023.03.21 |