인프런 커뮤니티 질문&답변

hoje님의 프로필 이미지
hoje

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 #6

메소드 퀴즈6

작성

·

225

2

 /** 기능 : 인덱스번지부터 *로 개인정보를 가리는 메소드
  * 매개변수 : String data, int index
    리턴타입 : 처리된 개인정보 => String
  * 메소드명 : getHiddenData
  */

  public static String getHiddenData(String data, int index) {
  String hiddenData = data.substring(0, index);
  for(int i = 0; i < data.length() - index; i++) {
  hiddenData += "*";
  // System.out.print("*");
  // 이렇게 하니까 *표가 앞으로 가버림.. 왜 그럴까요?
  }
  return hiddenData;

가운데 주석처리한대로 *를 프린트하니까

** 이름 : 나

이런 식으로 출력이 됩니다.

 

String hiddenData 에서 공개부분만큼만 자르고,

뒤에 비공개부분만큼 println 에서 line 빼고, for문 반복하면 **이 뒤로 붙어야 할 것 같은데 이해가 안됩니다..

 

복습겸 문제풀기 + 강의 다시보기 까지 해당 문제를 3번은 풀었는데도 코드를 이해하고 푸는게 아니라 답이 뭐였더라...를 더듬 거리면서 푸는거같아요..

 

답변 2

1

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?

getHiddenData() 메소드의 역할은 전달 받은 data 의 index 이후 위치를 별(*)표시로 비공개한 결과를 반환하는 것입니다. 이 메소드를 호출하는 main() 메소드에서는 비공개 처리된 데이터를 받아서 그대로 출력하게 되는 것이죠.

질문자분께서 하신 것처럼 System.out.print("*"); 문장을 getHiddenData() 메소드에 넣는 것은 비공개 작업 과정에서 * 을 출력하는 작업을 수행하게 됩니다. 이는 실제 hiddenData 에 포함된 데이터를 출력하는 것도 아니며 그냥 있는 그대로의 별 모양을 출력하는 것이 되므로 의미 없는 과정입니다. 그리고 반복문 내에 포함시켰으므로 반복 회차를 진행하는 과정에서 한 번씩 출력하게 되는 것은 정상입니다. 별을 먼저 출력한 다음에 마지막 결과를 메인 메소드에서 출력하게 되는 것이거든요.

메소드 파트를 다시 한 번 복습하시면 좋겠습니다. 일반적인 코드 흐름은 위에서 아래로 내려오다가 메소드를 만나면 메소드 내의 동작을 수행하게 되고 난 뒤에 기존 코드의 다음으로 내려가는 식으로 진행됩니다. 이 과정에서 메소드에게 값을 전달하고, 메소드의 수행 결과를 반환 받고 그것을 또 메인 메소드에서 사용하는 다소 복잡한 과정을 완전히 이해하셔야 내 것이 될 수 있으며, 말씀하신 것처럼 "정답이 뭐였더라.." 라는 기억에 의존해서

코드를 작성하시면 정답을 맞히더라도 내 것이 될 수 없습니다. 정답 코드와 달라도 좋으니 올바로 동작하는 코드를 완전한 '이해' 를 바탕으로 작성하실 수 있도록, 그 과정이 다소 어렵게 느껴질 수 있지만 반드시 그렇게 하셔야 보다 더 빠르게 성장하실 수 있습니다.

또 다른 질문 생기면 언제든지 남겨주세요 😊
감사합니다.

hoje님의 프로필 이미지
hoje
질문자

hiddenData += "*"

=> 반복문을 통해 비공개화 된 데이터에 *를 data.length() - index 만큼 붙이고, 그 값을 return한다.

나**, 011231-******* 등등

sout("*")

data.length() - index 만큼의 *을 만들고, 반복문을 종료한 후 hiddenData를 return한다

** 나,

******* 011231-

이렇게 *이 먼저 출력되고, hiddenData가 붙기 때문에 뒤로 갔다는 말씀일까요?

0

hoje님의 프로필 이미지
hoje
질문자

String hiddenData = "";
for(int i = 0; i < data.length() - index; i++) {
	hiddenData = data.substring(0, index);
	System.out.print("*");
}

hiddenData부분을 for문안에 넣으면 다르려나 했는데 똑같은 결과네요

 

 

나도코딩님의 프로필 이미지
나도코딩
지식공유자

네 맞습니다.

다만 sout("*"); 은

data.length() - index 만큼의 *을 만들고

가 아니라

data.length() - index 만큼의 *를 바로 출력하고

가 올바른 설명입니다 😊

hoje님의 프로필 이미지
hoje

작성한 질문수

질문하기