Back-End

[JAVA] 오답노트 및 발표 피드백

Minch13r 2025. 2. 17. 17:34
[3] 아래의 코드에 해당하는 디버깅 표와 Console 화면을 완성하세요. 
public static void main(String[] args) { 
  int[] datas= {8,2,1,9,7}; 
  int max=datas[0]; 
  int maxIndex=0; 
  for(int i=1;i<datas.length;i++) { 
   if(max<datas[i]) { 
    max=datas[i]; 
    maxIndex=i; 
   } 
  } 
  System.out.println("max: "+max); 
  System.out.println("maxIndex: "+maxIndex); 
 } 
[ 디버깅 표 ] 
max maxIndex i i<datas.length max<datas[i] 
8 0 1 T F 
     
     
     
     
[ Console ] 
max:       
maxIndex:

 

디버깅표 작성

max maxIndex i i<datas.length max<datas[i]
8 0 1 T F
8 0 2 T F
8 0 3 T T
9 3 4 T F
9 3 5 F  
[ Console ]
max = 9
maxIndex = 3

package test; 
 
class A { 
 int apple; 
 String banana; 
 void func(int num) { 
  num++; 
  this.apple++; 
 } 
} 
public class TEST { 
 public static void main(String[] args) { 
   
  int apple; 
  A a=new A();
  System.out.println(a.apple);
  int num=123; 
  a.func(num); 
  System.out.println(num); 
  System.out.println(a.apple); 
  // Q3. num의 값이 123으로 유지되는 이유는? 
  // Q4. num의 값이 124로 변경되기위한 방법은?

 

원래 정답

[Q3] void func()를 확인해보면 num++; 로 코드가 실행된 후 숫자가 증가하는 형식이기에 123이 유지된다.

[Q4] num++;이 아닌 ++num; 으로 수정해주면 된다.

 

이렇게 적었는데 실상 답은 그게 아니다.

 

답은 Pass By Value 이다.


Pass By Value

  1. 값에 의한 전달의 개념
    • 자바에서 기본형 데이터타입(primitive type)을 메소드의 매개변수로 전달할 때는 값의 복사본이 전달된다.
    • 원본 변수와 매개변수는 서로 다른 메모리 공간을 사용한다.
  2. 실행 과정 설명
    • main 메소드에서 num = 123으로 초기화
    • func() 메소드 호출 시 num의 값 123이 복사되어 전달
    • func() 안에서 num++는 복사된 값만 증가
    • 원본 num 값은 영향을 받지 않음

해결방법

class A {
    int apple;
    String banana;
    int func(int num) {
        return num + 1;
    }
}

public class TEST {
    public static void main(String[] args) {
        int num = 123;
        A a = new A();
        num = a.func(num);
        System.out.println(num); // 124 출력
    }
}

 

이와 같이 값을 과정을 바꿔서 즉, 설계 자체를 바꿔서 124가 출력될 수 있게 해야한다.


발표피드백

Toy-Project 발표를 진행했다.

 

https://minch13r.tistory.com/62

 

[JAVA] Toy-Project

2024.2.07 2주동안 5명과 합작해서 Model, View, Controller 파트 나눠 Toy-Project를 진행했다.주제는 OTT 순위를 크롤링 한 뒤, 관리자/사용자를 나눠 영상 추가, 시청하기, 영상 삭제, 즐겨찾기 등 구현해봤

minch13r.tistory.com

 

피드백 내용을 정리하자면 다음과 같다.

  1. ver 1.5.2 라고 했는데 왜 1.5.2라고 했는지 버전관리 한 내용을 상세설명 하면 설계에 있어 어떻게 진행됐는지 Flow를 보여줘 더 좋은 부분이다.
  2. 문장 통일성!! 예시를 들자면 뭐뭐 했음. 그랬음. ~로 초기화. 이런거를 쓰면 안된다. 음슴체로 통일할 것인지 아니면 명사로 통일할 것인지를 구체화 해야 한다. 그리고 끝나는 부분에 마침표를 다 쓰던가 아예 다 빼던가 통일성을 가져야 한다.
  3. Model, View, Controller 파트를 나누고 merge를 진행했는데, 이때 발표에서 Controller에 코드가 있다고 한들 기능이라는 명목으로만 봤을 때 Model인 부분을 잘 나눠서 발표해야 한다. 
  4. Logic Process를 영어로 간단하게 적어놨는데, 사진만 보여주고 넘어갔다. 여기서 Logic Process가 어떤 식으로 흘러가는지 DB를 거쳐 어떻게 나오는지 등 자세하게 설명하면 프로젝트에 대한 이해도가 더 올라갈 수 있다.
  5. 발표할 때 혹은 내용을 적을 때, 하였다 되었다 이런 내용은 일본식 피동 표현으로 불편해하는 사람이 있을 수 있다. 이런 경우에는 이런 걸 했다. 결과는 이렇게 도출됐다. 이런식으로 표현하는게 더 맞는 표현이다.
  6. 중요코드를 발표할 때 IDE에서 어떤 분은 Eclipse를 사용, 어떤 분은 IntelliJ를 사용했는데, 둘의 UI가 달라 통일성이 없는 부분이 있었다. 캡쳐 크기도 보는 사람이 한눈에 보기 쉽게 크기를 맞춰 하는게 좋고 IDE도 통일해서 배경까지 모두 통일한 후에 발표해야 더 깔끔하다.
  7. 앞에 사람이 같은 내용을 발표했다고 하더라도 나는 새로 말하는 것마냥 발표를 이어가야 한다. 왜냐하면 같은 팀이지만 파트는 나눠서 진행됐기 때문이다. 그렇기에 앞에 사람이 다 설명했어도 한 번 더 설명하는게 듣는 사람에게도 더 자세하게 들릴 수 있고 강조가 가능하다.

'Back-End' 카테고리의 다른 글

[JSP/Servlet] 웹개발 기초  (1) 2025.02.20
[JAVA] SQL과 JAVA를 합친 JDBC  (1) 2025.02.18
[JAVA] Toy-Project  (1) 2025.02.07
[크롤링] Jsoup과 Selenium  (3) 2025.02.01
[JAVA] 기초 공부 15 크롤링  (5) 2025.01.24