🎈 Q & A
오카방을 통해서 자바, 스프링에 대해서 나도 기초를 쌓고, 공부도 하고, 사람들에게 도움을 주기 위해 자바 스프링을 알려주는 카톡방을 몇달전에 열어뒀는데 오늘은 한분이 나도 처음에 많이 헤맸던 예제를 물어보셔서 그것에 대해서 적으려고 한다.

항상 질문하실때마다 모르는걸 물어보면 좋겠다(?)라는 생각을 하게 되는데, 오늘 질문은 아 이거 블로그 포스팅 해두면 좋겠다 싶어서 먼저 말씀을 드리고 포스팅을 한다.
🎈 문제
간단하게 이 분의 말은 로직 작성 중 에러가 나는 부분이 있는데 그게 뭔지 도저히 모르겠다는 말... 그리고 stream을 사용하셨는데 이게 문법적으로 상관없는지.. 를 물어보셨고 나는 stream의 foreach 통해서 add해도 괜찮지만 stream의 원래 사용 목적을 생각하셔야 한다. 라는 원론적인 말을 드렸다. 하지만 로직을 자세히 보자 단순히 List에 add를 하는 단순한 코드였고 stream이 문제가 아님을 알게됐다.
List<Student> students = null;
List<Class> class = classService.findClass("abc");
class.stream().foreach(c -> students.add(c.getStudent()));
System.out.println(students);
=======================
[result]
null
위의 코드에서 null이 나오는 이유...
🎈 설명
List<Student>와 같이 리스트에서 null로 초기화를 할 경우 해당 리스트를 add를 해도
리스트에 값이 저장되지 않는다.
그 이유는 null로 초기화를 진행하면 해당 값이 어떤 객체를 담는 리스트인지 따로 저장하지 않기 때문이다.
null 은 아무것도 저장하지 않은 상태로 초기화
new Object(); 는 새로운 객체를 만들고 참조할 수 있도록 해당 공간의 주소를 저장해서 변수를 초기화의 차이다.
🎈 결론
그래서 리스트 형으로 사용하기 위해서는 new ArrayList<>() 로 선언해줘야 한다.
'Languege > Java & Spring' 카테고리의 다른 글
| 스프링부트 Could not find mysql:mysql-connector-java:. (0) | 2023.04.23 |
|---|---|
| 스프링부트 어노테이션이란? 커스텀 어노테이션 추가하는 방법 (0) | 2023.04.19 |
| [JPA] DynamicUpdate 안되는 문제 (0) | 2022.11.08 |
| [Spring Framework OPEN API서비스 교육] OAuth 2.0 (0) | 2022.10.18 |