[공부 내용 정리]
반복문
for문
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
- 초기화식으로 변수 할당
- 조건문이 true면
- for문 블럭 안에 있는 실행문을 실행. 블럭 안의 실행문이 끝나면
- 증감식으로 들어가서 증감 연산자 수행
- 다시 (2) 조건식으로 돌아가서 반복 …
- (2) 조건식을 체크했을 때 조건문이 false 라면 for문이 끝남.
for each문
→ numbers 같은 배열이나, 혹은 리스트, Map 같은 iterator는 다음과 같이 for each문을 사용할 수 있음.
for (String number : numbers) {
System.out.println(number);
}
for문 - continue
for문 안에 블록을 수행하는 도중에 continue문을 만나면 바로 for문의 처음으로 돌아감.
public class ForContinueExample {
public static void main(String[] args) {
int[] marks = {90, 25, 67, 45, 80};
for (int i = 0; i < marks.length; i++) {
if (marks[i] < 70) {
continue;
}
System.out.println((i + 1) + "번 학생, 축하합니다 합격입니다!");
}
}
→ 점수가 70점 이상인 사람들에게만 합격 축하 메시지 보냄.
이중 for문
for문 안에 또 다른 for문을 포함한 것.
public class GooGooExample {
public static void main(String[] args) {
for (
}
}
<구구단 실행 결과>
public class Hello {
public static void main(String[] args) {
for(int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(i*j);
System.out.print(" ");
}
System.out.println();
}
}
}
While문
조건이 true일 경우에 계속해서 반복함. 특정 조건이 만족할 때까지 반복하는 경우에 사용함.
while (조건문) {
<수행할 문장1>;
<수행할 문장2>;
<수행할 문장3>;
...
}
ex)
public class WhileExample {
public static void main(String[] args) {
int treeHit = 0;
while (treeHit < 10) {
treeHit++; // treeHit += 1 로도 표현 가능
System.out.println("나무를 " + treeHit + "번 찍었습니다.");
if (treeHit == 10) {
System.out.println("나무 넘어갑니다.");
}
}
}
}
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.
→
- while문을 사용하여 반복문을 작성할 때에는 초기화식을 while절 밖에서 선언함.
- while문 안에서 증감연산을 함.
- while문 안에서 해당 값에 대한 조건식을 넣음.
while문 - break
강제로 while문을 빠져나가야 할 때 break문을 사용함.
int coffee = 10;
int money = 300;
while (money > 0) {
System.out.println("돈을 받았으니 커피를 줍니다.");
coffee--;
System.out.println("남은 커피의 양은 " + coffee + "입니다.");
if (coffee == 0) {
System.out.println("커피가 다 떨어졌습니다. 판매를 중지합니다.");
break;
}
}
→ 무한 루프를 돌다가 만약 coffee가 0이 되면 break를 호출해 while문을 빠져나감.
while문 - continue
ex) 1부터 10까지의 수 중에 홀수만을 출력하도록 하는 while문
int a = 0;
while (a < 10) {
a++;
if (a % 2 == 0) {
continue; // 짝수인 경우 조건문으로 돌아간다.
}
System.out.println(a); // 홀수만 출력된다.
}
do-while문
블럭을 먼저 수행하고 후에 조건식을 계산함.
do {
실행문; -> 조건식의 결과가 true일 때 실행될 문장
...
} while (조건식);
ex)
int i = 0;
do {
i++;
System.out.println(i);
} while (i < 5);
do - while 문의 특징
- 블럭{ }이 최소한 1번 이상은 수행될 것을 보장함.
- 블럭{ }을 먼저 수행한 다음 조건식을 체크함.
참조 자료형
데이터 타입 분류
참조 자료형이란 : 객체(Object)의 번지를 참조하는 자료형 (클래스, 배열, 열거 타입 등)
- 참조 자료형은 메모리의 번지(주소)를 값으로 갖음.
- 번지를 통해 객체를 참조한다는 뜻에서 참조 자료형이라고 부름.
- 기본타입 변수 : 값 그대로 Stack 영역에 저장됨.
- 참조타입 변수 : Heap 메모리 영역의 메모리 주소에 저장됨.
- 코드에서 사용된 String(문자열) 변수 또한 참조 자료형 변수이다.
참조 변수의 == , != 연산
- 참조타입 변수들 간의 == , != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용함.
- 즉, 주소값을 비교하는 것임.
참조 자료형 String의 동등 비교
동등 비교로 문자열을 비교하면 객체의 주소값을 비교함.
문자열 자체가 같은지 다른지 비교하려면?
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
→ equals() 메소드 사용!
null, NPE
NPE(Null Pointer Exception) : 빈(null) 값을 접근하려 할 때 발생하는 오류.
null이란?
- 참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻.
- null값도 초기화 값으로 사용할 수 있기 때문에 null로 초기화된 참조변수는 Stack 영역에 생성됨.
참조타입 변수가 null값을 갖는지 확인하는 방법
- !=, == 연산 수행
refValue1 == null //결과: false
refValue1 != null //결과: true
refValue2 == null //결과: true
refValue2 != null //결과: false
NPE 오류
프로그램 실행 도중 발생하는 오류를 예외(Exception)라고 부름.
- 그중에서도 **NPE(NullPointerException)**은 참조 자료형 변수를 잘못 사용하면 발생. 참조할 객체가 없으면 발생하는 오류임.
→ 이렇게 NPE 오류 발생
→ 이것을 해결하기 위해 null 대신 “ ”을 넣어주면 str 변수가 참조하는 String 객체가 생긴것이기 때문에 오류 해결 가능!
클래스
6.1 객체지향언어
자동차에 들어가는 부품들을 조립해서 자동차를 만들듯이,
프로그램에 들어가는 객체들을 조립해서 완성된 프로그램을 개발하는 기법이 바로 객체 지향 프로그래밍 (OOP : Object Oriented Programming) 이라고 한다.
6.2 클래스와 객체
클래스란 : 객체의 특징(속성, 기능)을 정해놓은 제품 설계도 규칙
객체란 : 실제로 만들어진 존재하는 제품
클래스 직접 선언
public class Main {
public static void main(String[] args) {
Main car = new Main(); // car 객체 생성
}
}
- 위 코드에서 new는 객체를 생성할 때 사용하는 키워드.
- 이렇게 선언하면 Main 클래스의 인스턴스인 car 객체가 만들어짐.
6.3.1 필드 (멤버변수)
객체의 고유 데이터가 저장되는 곳.
- 선언 형태는 변수와 비슷함.
- 클래스 전역에서 사용가능.
public class Main {
String company;
public static void main(String[] args) {
Main car = new Main(); // car 객체 생성
}
}
→ Main 클래스에 company라는 변수를 추가함.
- 이처럼 클래스에 선언된 변수를 멤버 변수 or 필드 라고 함.
- 클래스(Main)에 의해 생성되는 것 : 객체(car)
- 클래스(Main)에 선언된 변수 : 멤버 변수(=필드)
필드를 출력하는 법
→ 객체.필드
public class Main {
String company;
public static void main(String[] args) {
Main car = new Main(); // car 객체 생성
System.out.println(car.company);
}
}
6.3.2 생성자
6.3.2.1 생성자란?
생성자(Constructor)는 new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출됨.
→ 생성자의 규칙에 주의할 것.
public class Main {
String company;
Main() {
company = "현대자동차";
}
public static void main(String[] args) {
Main car = new Main(); // car 객체 생성
System.out.println(car.company);
}
}
ex) 입력을 받는 생성자
public class Main {
String company;
Main(String company) {
this.company = company;
}
public static void main(String[] args) {
Main car = new Main("현대자동차"); // 객체 생성시 입력인수 입력!
System.out.println(car.company);
}
}
→ 만약 클래스에 생성자가 하나도 없다면, 컴파일러는 자동으로 디폴트 생성자를 추가함.
6.3.2.2 디폴트 생성자
: 생성자의 입력 항목이 없고 생성자 내부에 아무런 내용이 없는 생성자.
Main() {
}
문제풀이
1. for문을 이용해서 a배열의 값을 b배열로 복사해보세요.
public class Question {
public static void main(String args[]) {
// for문을 이용해서 a배열의 값을 b배열로 복사해보세요.
int[][] a = {{1, 2, 3}, {4, 5, 6}};
int[][] b = new int[3][3];
// for문 작성하는 부분
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
b[i][j] = a[i][j];
}
}
// a배열과 b배열 출력
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.println("a[" + i + "][" + j + "]: " + a[i][j]);
System.out.println("b[" + i + "][" + j + "]: " + b[i][j]);
}
}
}
}
2. for문을 이용하여 배열에 있는 숫자들의 최대값과 평균을 구하세요.
public class Question {
public static void main(String args[]) {
// for문을 이용하여 배열에 있는 숫자들의 최대값과 평균을 구하세요.
int[] array = {12, 4, 7, 20, 1};
// 코드 작성하는 부분
int max = 0;
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
double avg = 0;
for (int i = 0; i < array.length; i++) {
avg += array[i];
}
avg = avg / array.length;
// 결과 출력 (최대값: max, 평균: avg)
System.out.println(max);
System.out.println(avg);
}
}
3. 0부터 20까지 짝수만 출력하는 코드를 작성해보세요.
public class Question {
public static void main(String args[]) {
// 0부터 20까지 짝수만 출력하는 코드를 작성해보세요.
int number = 0;
while (number <= 20) {
if (number % 2 == 0) {
System.out.println(number);
}
number ++;
}
}
}
4. 프로그래머스 문제
'Back-End > Java # 교육' 카테고리의 다른 글
[Java 교육] final/상수/Getter,Setter/상속 (0) | 2024.02.01 |
---|---|
[Java 교육] 메소드 (0) | 2024.01.31 |
[Java 교육] 연산/조건문/배열 (1) | 2024.01.29 |
[Java 교육] 변수/문자열 (0) | 2024.01.26 |
[Java 교육] Java 기초/코딩 컨벤션 (1) | 2024.01.25 |