일반적인 while문은 시작 전 조건을 검사하지만, do-while문은 조건과 상관없이 무조건 한 번은 실행한다.
do {
// 실행할 코드 (최소 1번은 무조건 실행)
} while (조건식); // ← 주의: 마지막에 세미콜론(;)이 반드시 필요하다.
break는 반복문이 진행 중일 때, 특정 조건에서 루프를 아예 부수고 탈출할 때 사용한다.
break를 만나는 순간, 뒤에 남은 반복 횟수와 상관없이 해당 반복문을 완전히 빠져나간다.for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 5가 되는 순간 반복문 종료
}
System.out.println(i); // 1, 2, 3, 4 까지만 출력된다.
}continue는 반복문을 끝내지 않는다. 다만, 이번 회차의 남은 코드만 스킵하고 다음 반복으로 바로 넘어간다.
continue 아래에 있는 코드는 무시하고, 즉시 반복문의 증감식이나 조건식으로 이동한다.for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 3일 때만 아래 출력문을 건너뛴다.
}
System.out.println(i); // 1, 2, 4, 5가 출력된다. (3은 제외)
}| do-while | 선 실행 후 조건 확인 | 최소 1회 실행 보장 | 일단 한 입 먹어보기 |
| break | 반복문 완전 파괴 | 루프 탈출 (완전 종료) | 비상구로 탈출하기 |
| continue | 현재 차례만 패스 | 다음 반복으로 점프 | 유튜브 광고 건너뛰기 |
프로그래밍의 가장 기초인 변수는 오직 하나의 값만 저장할 수 있다는 치명적인 한계가 있다. 예를 들어 한 사람의 이름, 나이, 키를 저장하려면 변수 3개가 필요하다. 관리해야 할 데이터가 수백 개로 늘어난다면 변수만으로는 감당하기 어려워진다.
이때 등장하는 개념이 객체다. 객체는 여러 데이터를 하나로 묶어주는 커피 캐리어와 같다. 용도에 따라 다양한 데이터를 담을 수 있는 바구니를 만들어 효율적으로 관리하는 것이 객체의 핵심이다.
가장 단순한 형태의 객체는 배열이다. 배열은 같은 종류의 데이터를 나란히 줄 세워 저장한다.
고정된 크기: new int[3]과 같이 선언하면 3명만 탈 수 있는 버스가 생성된다. 이 크기를 초과해서 데이터를 넣으려고 하면 ArrayIndexOutOfBoundsException 에러가 발생한다.
0부터 시작하는 번호표(Index): 자바의 인덱스는 1이 아닌 0부터 시작한다. 3인승 버스라면 좌석 번호는 0, 1, 2번이 된다.
boolean[] arr1 = new boolean[2];
뜻: "참/거짓(boolean)만 들어갈 수 있는 2칸짜리 상자를 만들고, 그 상자 이름을 arr1이라고 부를게!"
객체를 실제 제품이라고 한다면, 클래스는 그 제품을 만들기 위한 설계도다. 클래스 하나를 정의하면 다음과 같은 세 가지 작업이 가능해진다.
객체는 여러 데이터의 조합이기 때문에 덩치가 매우 크다. 반면 변수는 작은 값 하나만 들어갈 수 있는 좁은 공간이다. 따라서 객체 본체를 변수에 직접 넣는 것은 불가능하다.
이 문제를 해결하기 위해 자바는 리모컨 시스템을 사용한다.
int[] arr2 = arr1;과 같은 코드는 버스를 한 대 더 만드는 것이 아니라, 기존 버스의 리모컨을 복사하는 것이다. 따라서 arr2로 내부 값을 바꾸면 arr1으로 확인했을 때도 값이 바뀌어 있다. 같은 버스를 두 개의 리모컨으로 조종하는 셈이기 때문이다.코드에서 new 사람();을 실행하면 메모리에는 두 가지가 생성된다.
int[] arr4 = new int[10];
arr4[0] = 1;
arr4[1] = 2;
arr4[2] = 3;
arr4[3] = 4;
arr4[4] = 5;
arr4[5] = 6;
arr4[6] = 7;
arr4[7] = 8;
arr4[8] = 9;
arr4[9] = 10;
// 배열 안에 뭐가 들어있는지 확인하고는 싶고, 반복문을 돌리기가 귀칞을때 Arrays.toString() 을 사용.
// 한 줄로 보기편하게 출력된다.
System.out.println(Arrays.toString(arr4));
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 이런 식으로 출력됨
OOP(Object-Oriented Programming)는 프로그램을 단순히 순서대로 실행하는 명령어의 나열로 보지 않는다. 대신, 프로그램을 구성하는 여러 요소들을 하나의 '객체(Object)'라는 부품으로 만들고, 이 부품들을 조립하여 전체 시스템을 완성하는 방식이다.
쉽게 말해, 자동차를 통째로 한 번에 깎아서 만드는 것이 아니라 엔진, 바퀴, 핸들을 각각 따로 만든 뒤 조립하는 것과 같다.
과거의 절차지향 방식은 마치 긴 줄글로 된 요리 레시피와 같았다. 중간에 재료 하나만 바뀌어도 전체 순서를 다 뒤져야 했다. 하지만 객체 지향은 다음과 같은 강력한 장점을 가진다.
OOP를 제대로 이해하려면 다음 4가지 핵심 개념을 반드시 알아야 한다.
관련된 데이터와 기능을 하나의 주머니(객체)에 담고, 내부의 복잡한 동작은 숨기는 것이다.
이미 잘 만들어진 부모 설계도의 기능을 자식 설계도가 그대로 물려받는 것이다.
복잡한 실체에서 불필요한 부분은 빼고 공통적이고 중요한 특징만 뽑아내는 과정이다.
똑같은 명령을 내려도 연결된 객체에 따라 서로 다른 결과가 나타나는 마법이다.