강의

멘토링

로드맵

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của heyoje3254962
heyoje3254962

câu hỏi đã được viết

Java cơ bản của Nadocoding - Khóa học toàn bộ (20 giờ)

Câu đố #6

메소드 퀴즈6

Viết

·

320

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번은 풀었는데도 코드를 이해하고 푸는게 아니라 답이 뭐였더라...를 더듬 거리면서 푸는거같아요..

 

java객체지향

Quiz

41% người trả lời sai. Hãy thử ngay!

메소드를 사용하는 주된 이유가 무엇일까요?

프로그램 실행 속도를 높이기 위해

코드 중복을 줄이고 가독성을 높이기 위해

변수에 아무 곳에서나 접근하기 위해

자동으로 오류를 해결하기 위해

Câu trả lời 2

1

nadocoding님의 프로필 이미지
nadocoding
Người chia sẻ kiến thức

안녕하세요?

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

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

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

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

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

hoje님의 프로필 이미지
hoje
Người đặt câu hỏi

hiddenData += "*"

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

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

sout("*")

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

** 나,

******* 011231-

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

0

hoje님의 프로필 이미지
hoje
Người đặt câu hỏi

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

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

 

 

nadocoding님의 프로필 이미지
nadocoding
Người chia sẻ kiến thức

네 맞습니다.

다만 sout("*"); 은

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

가 아니라

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

가 올바른 설명입니다 😊

Hình ảnh hồ sơ của heyoje3254962
heyoje3254962

câu hỏi đã được viết

Đặt câu hỏi