묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
exHandler의 역할에 대해 궁금한 점이 있습니다.
@Slf4j @RestController public class ApiExceptionV2Controller { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalArgumentException.class) public ErrorResult illegalExHandler(IllegalArgumentException e) { log.error("[exceptionHandler] ex ", e); return new ErrorResult("BAD", e.getMessage()); } @ExceptionHandler public ResponseEntity<ErrorResult> userExHandler(UserException e) { log.error("[exceptionHandler] ex ", e); ErrorResult errorResult = new ErrorResult("USER-EX", e.getMessage()); return new ResponseEntity(errorResult, HttpStatus.BAD_REQUEST); } @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ExceptionHandler public ErrorResult exHandler(Exception e) { log.error("[exceptionHandler] ex ", e); return new ErrorResult("EX", "내부 오류"); } @GetMapping("/api2/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } if (id.equals("bad")) { throw new IllegalArgumentException("잘못된 입력 값"); } if (id.equals("user-ex")) { throw new UserException("사용자 오류"); } return new MemberDto(id, "hello " + id); } @Data @AllArgsConstructor static class MemberDto { private String memberId; private String name; } }ApiExceptionV2Controller가 위와 같이 구성되어 있는데,여기서 exHandler 메서드는 fallback 기능을 하는 메서드로 이해하면 될까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
프로젝트 생성 후 기본 코드 실행 시 Null Check Operator 에러 발생
안녕하세요. 안드로이드 스튜디오에서 프로젝트 생성 후 코드수정없이 바로 실행했는데, 아래와 같은 오류가 발생합니다. 도와주세요.Oops; flutter has exited unexpectedly: "Null check operator used on a null value".A crash report has been written to C:\Users\IHC\AndroidStudioProjects\dataprogram_flutter\flutter_01.log. 아래는 flutter_01.log 파일안의 내용입니다. Flutter crash report.Please report a bug at https://github.com/flutter/flutter/issues.## commandflutter --no-color run --machine --track-widget-creation --device-id=emulator-5554 --start-paused --dart-define=flutter.inspector.structuredErrors=true lib\main.dart## exception_TypeError: Null check operator used on a null value```#0 AndroidStudioJavaGradleConflictMigration.migrate (package:flutter_tools/src/android/migrations/android_studio_java_gradle_conflict_migration.dart:107:39)#1 ProjectMigration.run (package:flutter_tools/src/base/project_migrator.dart:84:16)#2 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:280:15)#3 AndroidGradleBuilder.buildApk (package:flutter_tools/src/android/gradle.dart:208:11)#4 AndroidDevice.startApp (package:flutter_tools/src/android/android_device.dart:578:29)<asynchronous suspension>#5 FlutterDevice.runHot (package:flutter_tools/src/resident_runner.dart:468:33)<asynchronous suspension>#6 Future.wait.<anonymous closure> (dart:async/future.dart:525:21)<asynchronous suspension>#7 HotRunner.run (package:flutter_tools/src/run_hot.dart:421:34)<asynchronous suspension>#8 AppDomain.launch.<anonymous closure> (package:flutter_tools/src/commands/daemon.dart:649:9)<asynchronous suspension>#9 AppDomain.launch (package:flutter_tools/src/commands/daemon.dart:647:5)<asynchronous suspension>#10 RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:638:15)<asynchronous suspension>#11 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1294:27)<asynchronous suspension>#12 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)<asynchronous suspension>#13 CommandRunner.runCommand (package:args/command_runner.dart:212:13)<asynchronous suspension>#14 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:296:9)<asynchronous suspension>#15 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)<asynchronous suspension>#16 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:244:5)<asynchronous suspension>#17 run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:91:9)<asynchronous suspension>#18 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)<asynchronous suspension>#19 main (package:flutter_tools/executable.dart:91:3)<asynchronous suspension>```## flutter doctor```[✓] Flutter (Channel master, 3.10.0-17.0.pre.31, on Microsoft Windows [Version 10.0.19044.1288], locale ko-KR) • Flutter version 3.10.0-17.0.pre.31 on channel master at C:\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 3ed5f51208 (81 minutes ago), 2023-04-30 05:42:24 -0400 • Engine revision e99f31f443 • Dart version 3.1.0 (build 3.1.0-56.0.dev) • DevTools version 2.23.1[✓] Windows Version (Installed version of Windows is version 10 or higher)[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2) • Android SDK at C:\Users\IHC\AppData\Local\Android\sdk • Platform android-33, build-tools 33.0.2 • Java binary at: c:\Program Files\Android\Android Studio\jbr\bin\java • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694) • All Android licenses accepted.[✓] Chrome - develop for the web • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe[✗] Visual Studio - develop for Windows ✗ Visual Studio not installed; this is necessary for Windows development. Download at https://visualstudio.microsoft.com/downloads/. Please install the "Desktop development with C++" workload, including all of its default components[✓] Android Studio (version 2022.2) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)[✓] Android Studio • Android Studio at c:\Program Files\Android\Android Studio • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • android-studio-dir = c:\Program Files\Android\Android Studio • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)[✓] Connected device (4 available) • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64 • Android 13 (API 33) (emulator) • Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19044.1288] • Chrome (web) • chrome • web-javascript • Google Chrome 112.0.5615.138 • Edge (web) • edge • web-javascript • Microsoft Edge 92.0.902.67[✓] Network resources • All expected network resources are available.! Doctor found issues in 1 category.```
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
33강 완강기준 list -> get -> list -> 페이지이동 오류 해결법
33강 완강기준이며 list에서 제목을 클릭하여 get(상세페이지) 이동후 뒤로가기를 눌러 list로 돌아와서 페이지 이동을 하면 다음페이지(list)가 아닌 get(상세페이지)가 나오는 현상이 발생했습니다.코드를 분석해보면 지금 상세보기 클릭을 누르면 pageFrm.attr("action","${cpath}/board/get");<-- 해당 코드를 통해 jsp내 적혀있는 pageFrm이란 form의 action에 ${cpath}/board/get <-- 해당 주소로 이동하기 때문에 get(상세페이지)가 나오게 됩니다.여기서 뒤로가기를 누르더라도 이미 jsp 상의 pageFrm이란 form의 action에는 ${cpath}/board/get <-- 이 주소가 적혀있으므로 새로고침을 하기전에 페이지 이동을 시도하면 list가 아닌 get(상세페이지)가 나오게 되는것입니다.해결방법은 간단합니다.ㄴ 페이지 번호를 눌렀을때 pageFrm이란 form의 액션에 list 주소가 들어가도록 추가로 js에서 처리해주면 됩니다. (아래 사진 참고하시면 됩니다.)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ResponseStatusException 에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]- 강의 자료 9.API 예외 처리 p20를 보면, @ResponseStatus를 사용할 경우, 조건에 따라 동적으로 변경하는 것이 어려워 ResponseStatusException을 사용한다고 나와 있는데,그럼, 아래처럼 작성할 수 있다는 말인가요?if(case == 1) {throw new ResponseStatusException(HttpStatus.NOT_FOUND, "error.bad", new IllegalArgumentException()); } else {throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "error.bad", new BadRequestException()); }
-
미해결처음 배우는 리액트 네이티브
안녕하세요. 스택네비게이션 문제 질문드립니다 ㅜ
얼마전에 선생님 답변 덕에 빌드는 잘 했지만 스택네비게이션 문제로 빌드 후 화면이 제대로 나오지 않아서 질문드립니다. 깃허브 주소는 https://github.com/KongGeon/jlog2 입니다.증상은 안드로이드에서 앱을 실행했을때 스플래시 화면에서 멈추는 현상입니다.App.js > Index.js > Auth.js > Signin.js 순서로 진행될때Auth.js의 스택네비게이션에서 문제가 발생하는 듯 합니다. 혹시 몰라서 옵션들도 어지간한것을은 주석처리하였는데도 스플래시에서 멈추네요 ㅜㅜApp.js의 Alert.alert("성공");은 성공적으로 나오지만 Auth.js의Alert.alert("auth");는 표시되지 않고 스플래시 화면에서 멈추는 증상이 나타납니다. Auth.js를 거치지 않고 App.js > Index.js > Signin.js index.js에서 바로 <Signin /> 를 불러오면 화면에 잘 나타납니다!
-
해결됨스프링 프레임워크는 내 손에 [스프2탄]
제이쿼리 modify 수정하실 부분이 있습니다 : )
우선 강의 차수는 33강 수정과 삭제후 페이지 번호 유지하기 파트입니다.idx, title, content, writer가 리스트로 넘어갈때는 필요하지 않기 때문에 find()로 찾고 remove() 해주는 방식인데 formData.find("#idx") <--- 현재 id 선택자로 찾고있습니다. 강의 / github 둘다 확인해보시면 name만 지정하였기 때문에 formData.find("#idx")로는 찾을수가 없습니다.수정해주시겠지만 해당 글을 보는 다른 분들을 위해서 방안을 2가지 정도 적어보자면1. formData.find("#idx") <-- 여기서 id로 idx를 찾아주고 있으니 각 id,title,content,writer가 기입되어 있는 태그에 id를 작성해주시면 될듯합니다. 예시 -> <td><input type="text" class="form-control" id ="idx" name ="idx" value="${vo.idx}" readonly ="readonly"/></td>2. formData.find("#idx") <-- 현재는 id를 읽고 있는데 name을 읽을수 있게 변경하면 됩니다.예시 -> formData.find("input[name='idx']").remove();
-
해결됨[2026 신규] 데이터분석 준전문가(ADsP) 자격증
3-15 연관분석 개념 내용 빠졌어요.
연관분석 문제풀이만 있고 개념설명 강의가 없습니다!
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
포인터 문자열 할당시 +1해주는 이유
안녕하십니까section2의 포인터와 배열/문자열 강의의 예시 중 ps = new char[strlen(animal)+1]; 부분에서 +1을 해주는 이유가 무엇인가요?null값과 관련되었다고 예상되는데 만약 그렇다면null값이 필요한 string과 달리 char형은 '\n'과 같은 null값이 없어도 된다고 알고 있습니다.1byte더 큰 크기 할당이 왜 필요한가요?
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TestLock을 Template으로 만들경우
TestLock을 Template class 로 선언할경우typename을 type으로 명명한 상황에서TestRead에서의 _queue가 Empty일경우 반환값을 지정할 방법이 있을까요??
-
해결됨업무가 100배 빨라지는 엑셀 데이터 활용과 분석 노하우
병합해제 시 테두리 자동생성, 셀서식에서 0과 #차이
안녕하세요, 강사님 저는 office365 사용중입니다. 질문 드립니다. 병합해제 시 테두리 생성 ('빈셀만 선택하여 데이터 동시입력' 강의 중 05:07경)강사님은 병합해제 하면 표에 테두리가 생기던데, 저는 병합해제하면 테두리가 생기지 않아요. 엑셀버전마다 다른건가요?셀서식에서 0과 #의 차이('데이터를 분리하고 잘못된 형식 변환' 강의 중 12:12경)강사님은 000-00-00000을 사용하셨는데, ###-##-#####도 결과는 같더라구요.0과 #은 어떤 차이인가요?답변 부탁드립니다. 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver 에 대해 궁금한 점이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]- 강의를 보면, 스프링이 제공하는 ExceptionResolver에 대해 나오는데, 그러면, 그 전에 HandlerExceptionResolver는 스프링이 제공하는게 아니라 서블릿에서 제공하는 건가요?
-
미해결엑셀 시작하기 : EXCEL 입문 (Inflearn Original)
수식 질문 드립니다.
선생님 안녕하세요. 다름이 아니라 수식을 잘 못해서 헤메다 선생님 생각이 궁금해서 여쭙게 되었습니다.1. 학생의 성적을 입력하면 대학 별 반영식에 따라 자동으로 점수가 산출되는 수식2. 산출된 점수로 상향, 안전, 하향 지원 여부 표기되게 하는 수식어떤 방법을 사용해야 좋을까요..?
-
해결됨외워서 끝내는 SSL과 최소한의 암호기술
공캐키 신뢰를 위한 검증체계 12:53에 적힌 글 질문있습니다
SSL 인증서를 검증하는 방법은 ~~~ CA의 인증서에서 포함된 Public key를 이용해 SSL 인증서 Hash 결과를 복호화 하면 된다가 아니라암호화된 Hash를 복호화 하면 된다가 맞지 않나요??아니면 Hash 결과라는 말이 암호화된 Hash를 말씀하시는건가요?
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
북마크 탭에서 북마크 취소 시 문제
안녕하세요. 북마크 진행하다가 북마크 탭에서 북마크를 삭제하는 부분에서 문제가 생겨 질문 올립니다.아래 상태에서북마크를 취소하기위해 클릭하면이렇게 제가 누른 부분은 사라지지만(이 부분은 제가 클릭했을 때 bookmarkIdList에 KeyList가 없다면 사라지게 해놓은 겁니다) 또 중복으로 아이템이 생깁니다. 계속 시도해봤는데 어디서 고쳐야할지 잘 모르겠습니다.아래는 BookmarkRVAdapter.kt의 코드입니다. 편하실 때 답변해주시면 감사하겠습니다!package com.bokchi.mysolelife.contentsList import android.content.Context import android.content.Intent import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.bokchi.mysolelife.R import com.bokchi.mysolelife.utils.FBAuth import com.bokchi.mysolelife.utils.FBRef import com.bumptech.glide.Glide class BookmarkRVAdapter(val context : Context, val items : ArrayList<ContentModel>, val keyList : ArrayList<String>, val bookmarkIdList : MutableList<String> ) : RecyclerView.Adapter<BookmarkRVAdapter.Viewholder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkRVAdapter.Viewholder { val v = LayoutInflater.from(parent.context).inflate(R.layout.content_rv_item, parent, false) Log.d("RVAdapterB", "key List : " + keyList.toString()) Log.d("RVAdapterB","Bookmark List : " + bookmarkIdList.toString()) return Viewholder(v) } override fun onBindViewHolder(holder: BookmarkRVAdapter.Viewholder, position: Int) { holder.bindItems(items[position], keyList[position]) } override fun getItemCount(): Int { return items.size } inner class Viewholder(itemView : View) : RecyclerView.ViewHolder(itemView) { fun bindItems(item : ContentModel, key : String) { itemView.setOnClickListener { val intent = Intent(context, ContentShowActivity::class.java) intent.putExtra("url", item.webUrl) itemView.context.startActivity(intent) } val ContentTitle = itemView.findViewById<TextView>(R.id.TextArea) val imageViewArea = itemView.findViewById<ImageView>(R.id.imageArea) val bookmarkArea = itemView.findViewById<ImageView>(R.id.BookmarkArea) if(bookmarkIdList.contains(key)) { // bookmarkIdList가 KeyList에 있는 정보를 가지고 있다면 bookmarkArea.setImageResource(R.drawable.bookmark_color) } else { bookmarkArea.setImageResource(R.drawable.bookmark_white) } ContentTitle.text = item.title Glide.with(context) .load(item.imageUrl) .into(imageViewArea) bookmarkArea.setOnClickListener { // 북마크를 누르면 실행되는 내용 // 북마크를 클릭했을 때, 북마크가 있는 경우 -> 북마크 삭제 if(bookmarkIdList.contains(key)) { ContentTitle.visibility = View.GONE imageViewArea.visibility = View.GONE bookmarkArea.visibility = View.GONE FBRef.bookmarkRef .child(FBAuth.getUid()) .child(key) .removeValue() } } if(bookmarkIdList.isEmpty()) { ContentTitle.visibility = View.GONE imageViewArea.visibility = View.GONE bookmarkArea.visibility = View.GONE } Log.e("BOOKMARK", bookmarkIdList.toString()) } } }
-
해결됨스프링 부트 - 핵심 원리와 활용
테스트 코드 on demand static import 관련 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (있을 수 있는데 못찾았습니다.)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]안녕하세요..!테스트 코드 작성하실 때 import static org.assertj.core.api.Assertions.*;이렇게 스태틱 임포트하시는 이유가 궁금합니다.Assertions.assertThat(bean).isNotNull(); assertThat(bean).isNotNull(); -> 스태틱 임포트두 코드의 차이가 궁금합니다.테스트코드인 것과 관련이 있다고 생각하고 있습니다.하지만 조금 더 구체적인 이유를 알려주시면 감사하겠습니다.
-
해결됨스프링 프레임워크는 내 손에 [스프2탄]
@Modelattribute와 Requestparam의 생략
강의를 듣다가 헷갈리는 부분이 생겨서 질의합니다..!!!1.68번 라인의 Board vo, Vriteria cri가 각각 @Modelattribute가 생략 처리가 된게 맞을까요? 2.93번 라인의 int idx는 @RequestParm이 생략처리가 된것인지 궁금합니다.감사합니다 : )
-
미해결[신규 개정판] 이것이 진짜 엑셀자동화다 - 기본편
TypeError: 'module' object is not callable 이런 오류가 뜹니다
강의 그대로 따라서 진행중인데, 저런 에러코드가 뜨면서 크롬 새창이 열리지 않아요 ㅜㅜ 어떻게 해결해야할까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 되는 건지 여쭤보고 싶습니다!
항상 감사합니다.
-
해결됨외워서 끝내는 SSL과 최소한의 암호기술
디지털 서명은 무결성을 보장하나요?
설명에서 디지털 서명에 대해private key로 hash를 암호화하는 것이라고 하셨는데,초반부 설명에서는 위 변조 방지라고 하셔서 이 말씀이 '무결성'을 의미하는 것 같아 살짝 헷갈립니다.답변에서 말씀하신대로 private key로 기밀성을 부여하는 것일뿐 중간자가 데이터와 인증서를 가로채서 내용을 바꾸고 해시화를 다시 하고 이를 public키로 다시 암호화를 해서 보내면 수신측에서 결국 변조되었는지는 알 방법이 없으니 '기밀성'만 보장되는게 맞는거 같습니다.결론적으로 말씀하신 위변조 방지라는 말은, 디지털 서명이라는 메커니즘을 추가해서 위변조가 조금 어려워진다 허나 무결성을 보장하는 것은 아니다 라고 받아들이면 될까요?
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
64번 스택 오버플로우 뜨는 이유가 궁금합니다!
제가 푼 방식은 정점이 n번까지 다다르면 카운트를 하나 올리고 방문여부를 체크하던 배열을 원상태로 초기화하는 방법입니다.근데 이게 m이 작을 때는 잘 작동하는데 m이 커지는 순간 스택 오버플로우가 발생합니다..! 손그림 그려서 해봤는데 스택 오버플로우가 발생할 것 같기도 하고 왜 발생하는 건가 싶기도 해서 질문드립니다...(너무 긴가민가해서 좀 더 명쾌한 이유를 알고 싶어서요 ㅠㅠ)#include<iostream> using namespace std; #include<vector> #include<algorithm> #include<string> int n, m; // 정점 n개, 간선 m개 vector<vector<int>> adjacent; // -1은 연결 없음 vector<int> visited; int ans = 0; void DFS(int pre) { if (pre >= n) // n에 다다르면 카운트 증가, 방문 배열 초기화 { ans++; visited.clear(); visited.resize(n + 1, 0); return; } visited[pre] = 1; // 일단 방문했으니 체크 for (int i = 1; i <= n; i++) { // 방문한 적 있거나 연결 끊겨있으면 continue해서 무시 if (visited[i] == 1 || adjacent[pre][i] == -1) continue; DFS(i); // 그 외라면 DFS 재귀호출 } } int main(void) { cin.tie(NULL); ios_base::sync_with_stdio(false); freopen("input.txt", "rt", stdin); // 파일 입력받음 cin >> n >> m; adjacent.resize(n + 1, vector<int>(n + 1, -1)); for (int i = 0; i < m; i++) { int s, e; // 시작 정점, 도착 정점 cin >> s >> e; adjacent[s][e] = 1; } visited.resize(n + 1, 0); DFS(1); cout << ans; }아 그런데 스택 오버플로우 생기는 것 땜에 강사님 설명 봤고, 설명을 통해 고친 내용은 완벽히 이해된 상태입니다! 그냥 스택 오버플로우 발생 이유를 정확히 알고 싶어 질문드립니다 감사합니다