본문 바로가기

자바 JAVA

자바 공부 잊지말아야 할 내용 정리 1편

자바 공부하면서 들었던 의문점이나 이해했던 개념들을 정리해보자

 

  1. 다중for문 쉽게 이해하기 

- 다중 for문에서 i, j 변수 사용시에 i는 행, j는 열을 의미한다고 보면 쉽다.

- 테이블 형태의 데이터에서 한 행을 볼 때 바뀌지 않는 수가 i, 한 열을 볼때 바뀌지 않는 수가 j

ex) 9x1=9 9x2=18 9x3=27 에서 9는 i

 

  2. break는 break를 감싸고 있는 첫번째 반복문을 빠져나간다. 

(반복문 안의 switch 안의 break의 경우는 switch만 빠져나옴)

 

  3. continue는 continue를 감싸고 있는 반복문의 첫줄로 돌아감. 

(초기조건이 i=1, 증감식 i++인 for문의 경우, continue할 시 i=1이 아닌 i=2가 된다.)

 

  4. while문은 조건을 먼저 체크후 반복문 실행. do while문은 먼저 한번 실행한 다음 조건 체크 

 

  5. 배열 개념 

- int a1....a100까지 일일히 변수선언해야할 것을 간편하게 해주는 것이 배열

- 변수는 일일이 값을 집어넣어 초기화하지만, (ex) int a = 0;
배열값은 자동으로 초기화됨

- 변수를 일일이 선언하면 각자 제멋대로 다른 메모리 할당받지만,

배열은 시작인덱스부터 연속적으로 메모리 할당받음

- 시작인덱스주소는 메모리할당시마다 매번 달라짐

- ** 배열명은 그 배열의 시작주소를 의미

(다르게 말하면 배열명이라는 변수에 배열시작주소가 저장됨)

- 배열의 마지막 값을 사용할때는 a.length 표현을 많이씀

- 배열은 선언과 동시에 크기가 고정

 

  6. 배열복사 (배열의 크기 변경을 위한 방법) 

- 배열복사 방법 두가지 Systemarraycopy 와 for문

System.arraycopy(복사할대상, 복사시작인덱스, 붙여넣기할대상, 붙여넣기시작인덱스, 복사길이);

- 배열복사 후 참조되지 않는 데이터들은 일정시간 후 garbage collection에 의해 사라짐

- 배열복사는 결국 메모리에 부하가 가는 것이기 때문에 선호하는 방법은 아님

 

  7. char[] a는 System.out.print(a)의 문법으로 배열 출력가능. 다른타입은 불가 

 

  8. String 클래스 

String a = abc는
char[] a = new char[]{a, b, c}와 같다.
그럼에도 String클래스를 굳이 쓰는 이유는
char배열에서 쓸수있는 메소드에 추가로 다른 메소드를 더 쓰기위함
ex) char문자가 같은지 비교하려면 ==로 한문자씩 비교하는데 String에서는 문자열단위로 비교

 

  9. 자주 바뀌는 값은 String변수로 잘 안씀. 값이 변할때마다 메모리 재할당하기 때문(배열복사) 

ex) String str = "Java";
str = str + "8"; // "Java8"이라는 새로운 문자열이 str에 저장
System.out.println(str); // "Java8"
문자열 str의 내용이 변경되는 것 같지만, 새로운 내용의 문자열이 생성되는 것.

>> 배열은 선언과 동시에 크기가 정해짐. java로 크기 4인 배열이 만들어졌는데,

여기에 8을 추가하라는것은 크기가 5가 되야한다는 것이므로 내부적으로 배열복사가 일어남.

 

  10. String클래스 중요메소드 

charAt(), length(), substring(), equals(), toCharArray()

 

  11. 자바자료형 

- 기본자료형 (문자형, 숫자형<정수형, 실수형>, 논리형)

- 참조자료형 (클래스, 인터페이스, 배열)
참조자료형은 시작주소값을 가지고 있는 것

 

  12. 향상된 for문 (최근 젊은 개발자들이 쓰는 문법) 

for( String str : names)
{
System.out.println(str);
}

 

  13. 2차원 배열 

- 다차원 배열 초기화(2차원)
int[][] arr = new int[][]{{1,2,3},{4,5,6}}

여기서 중괄호 묶음 한개는 행 하나를 의미, 하나의 중괄호 안의 소의 개수는 열을 의미

 

2차원 배열에서 a.length는 행의 길이만 가져오는 것 같은데 열의 길이 가져오려면 length 어떻게 써야함??

-> int[][] a = new int[][] {{5, 8, 10, 6, 4},{11, 20, 1, 13, 2},{7, 9, 14, 22, 3}}; 에서
a는 [0],[1],[2]인덱스를 가지고 있다.(즉, 행의 개수)

a의 [0]인덱스는 다시 [0],[1],[2],[3],[4] 인덱스를 가지고 있다.(즉, 열의개수)
풀어쓰면 a.length = 3이고, a[0].length = 5이다.