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

David님의 프로필 이미지
David

작성한 질문수

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

String 문자열, String[] 배열에서의 .length, .length(), .charAt() 쓰임의 차이점을 알고 싶습니다 :)

해결된 질문

작성

·

3.3K

0

안녕하세요, 다름이 아니라 제가 나도코딩 자바(Java) 기본편을 공부하면서, 배열(Array)에 관해 모르는 것이 생겨서 이렇게 질문을 남깁니다.

일반적으로 배열이 String[] array = {...}; 이렇게 선언 되었을 때, array.length를 이용해서 배열의 길이를 파악하고, array[0] 처럼 이렇게 인덱스로 값의 위치를 파악하면서 데이터를 읽는다고 알고 있습니다.

반면에 String sentence = "sentence"; 이런 경우에는 같은 length를 쓰지만 String 클래스의 메소드라서 괄호를 나타낸 sentence.length()로 길이를 파악하고, "..."; 안 문장의 각 글자 별 위치를 파악할 때는 sentence.charAt()을 쓴다고 알고 있습니다. 제가 이해한 부분이 혹시 맞을까요?

또한 아래처럼 선언된 String[] 배열에서:

String[] Java = { "나는 자바가 좋아요" };

Java 배열의 전체 길이를 파악하고 싶다면, Java.length 으로 적는데,

만약 배열 안 문장 "나는 자바가 좋아요" 의 전체 길이를 알고 싶다면 Java[].length()으로 적고,

배열 안에 들어있는 문장 "나는 자바가 좋아요" 에서 각 낱말의 위치를 파악하고 싶다면, Java[].charAt()를 적으면 되는 건가요? 여기서 Java[].부분에는 배열 index를 적고 (예를 들면 Java[0]), charAt()은 "..." 문장의 각 글자 별 인덱스를 적는 방식으로요.

질문이 조금 많이 길었습니다. 하지만 동시에 그 만큼 제가 또한 열심히 배우고 싶다는 열정으로 봐주셨으면 합니다! 게다가 앞으로 다가올 기말시험에서도 배열의 비중이 꽤 크기도 해서, 정말로 잘 배우고 싶습니다! (해외에서 대학을 다니는 지라 지금 이맘때 쯤이 시험기간입니다 ㅠㅠ)

참 얼마 전에, 자바로 소켓 프로그래밍으로 과제를 해야 했었던 일이 있었는데, 그 때 나도코딩님이 업로드 해주신 섹션 12. (Section 12.) 예외 처리 부분이 상당히 많이 도움 되었습니다.

덕분에 과제에서 나쁘지 않은 점수를 받았습니다.

앞으로도 좋은 강의 잘 부탁하고, 진심으로 감사합니다 :-)

답변 1

1

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

안녕하세요?
모든 내용을 잘 이해하고 설명해주셔서 제가 별다른 답변을 드릴 게 없네요 😅 질문주신 내용을 다음과 같이 코드로 한 번 정리해봤어요.

String [] array = { "세글자", "무려여섯글자" }; // 문자열 2개를 담은 배열
System.out.println("배열의 크기 : " + array.length); // 2 (콤마로 구분된 문자열 개수)
System.out.println("배열의 0 인덱스 값 : " + array[0]); // 세글자
System.out.println("배열의 1 인덱스 값 : " + array[1]); // 무려여섯글자

String sentence = "hello";
System.out.println("문자열의 길이 : " + sentence.length()); // 5 (글자수)
System.out.println("문자열의 0 인덱스 값 : " + sentence.charAt(0)); // h
System.out.println("문자열의 1 인덱스 값 : " + sentence.charAt(1)); // e
System.out.println("문자열의 2 인덱스 값 : " + sentence.charAt(2)); // l

String[] java = { "나는 자바가 좋아요" }; // 문자열 1개를 담은 배열
System.out.println("배열의 크기 : " + java.length); // 1 (콤마로 구분된 문자열 개수)
System.out.println("배열의 0 인덱스 값 : " + java[0]); // 나는 자바가 좋아요
System.out.println("배열의 0 인덱스 값의 길이 : " + java[0].length()); // 10 (글자수)
System.out.println("배열의 0 인덱스 값의 1 인덱스 값 : " + java[0].charAt(1)); // 는

그리고 위 코드의 실행 결과는 다음과 같습니다. (구분을 위해 임시로 줄바꿈을 하였습니다)

배열의 크기 : 2
배열의 0 인덱스 값 : 세글자
배열의 1 인덱스 값 : 무려여섯글자

문자열의 길이 : 5
문자열의 0 인덱스 값 : h
문자열의 1 인덱스 값 : e
문자열의 2 인덱스 값 : l

배열의 크기 : 1
배열의 0 인덱스 값 : 나는 자바가 좋아요
배열의 0 인덱스 값의 길이 : 10
배열의 0 인덱스 값의 1 인덱스 값 : 는

코드와 비교해보시면 쉽게 납득이 되실 거에요.

질문 내용을 봤을 때 인덱스와 length, 그리고 charAt 등 내용은 모두 잘 이해하셨는데요. String 배열과 일반 String 하나에 대한 개념만 완전히 잡으시면 되겠습니다. String 배열 (다른 자료형도 동일하지만) 은 String 을 여러 개 가질 수 있습니다. 비엔나 소시지 하나가 String 이라면 줄줄이 묶여진 비엔나 소시지들을 String 배열이라고 생각해주시면 되는데요. 붙어 있는 소시지들을 가위로 싹둑 잘라버리면 그냥 하나의 비엔나 소시지가 될 뿐입니다. 즉 String 배열도 여러 개의 String 을 가질 뿐, 각각의 String 은 일반 String 과 다를 바가 없지요.

그래서 아래 코드와 같이 인덱스를 통해 배열의 어떤 요소에 접근하게 된다면, 그때부터는 일반 String 과 동일하게 length() 나 charAt() 을 사용할 수 있습니다.

String [] array = { "세글자", "무려여섯글자" }; // 문자열 2개를 담은 배열
String s = "세글자"; // 문자열 1개

System.out.println("배열의 0 인덱스 값 : " + array[0]); // 세글자
System.out.println("문자열 s 의 값 : " + s); // 세글자

System.out.println("배열의 0 인덱스 값의 길이 : " + array[0].length()); // 3
System.out.println("문자열 s 의 길이 : " + s.length()); // 3

System.out.println("배열의 0 인덱스 값의 1 인덱스 값 : " + array[0].charAt(1)); // 글
System.out.println("문자열 s 의 1 인덱스 값 : " + s.charAt(1)); // 글

실행 결과는 이렇습니다. (구분을 위해 임시로 줄바꿈을 하였습니다)

배열의 0 인덱스 값 : 세글자
문자열 s 의 값 : 세글자

배열의 0 인덱스 값의 길이 : 3
문자열 s 의 길이 : 3

배열의 0 인덱스 값의 1 인덱스 값 : 글
문자열 s 의 1 인덱스 값 : 글

결국 array[0] 는 일반 String 변수인 s 와 비교했을 때, 뒤에 인덱스를 지칭하는 부분( [0] )이 있다는 점만 다를 뿐 일반 String 변수와 동일하게 length(), charAt() 을 사용할 수 있게 됩니다 😊
궁금증 해결에 도움되었으면 좋겠어요!

감사합니다.

David님의 프로필 이미지
David

작성한 질문수

질문하기