1. 메서드 오버로딩 (Method Overloading)
자바에서 메서드 오버로딩은 동일한 이름의 메서드를 여러 개 정의하는 것을 의미합니다. 이때 각 메서드는 서로 다른 매개변수의 타입, 개수, 순서 등을 가집니다. 메서드 오버로딩을 통해 코드의 가독성과 재사용성을 높일 수 있습니다.
public class Example {
// 두 정수를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// 세 정수를 더하는 메서드
public int add(int a, int b, int c) {
return a + b + c;
}
// 두 실수를 더하는 메서드
public double add(double a, double b) {
return a + b;
}
}
2. 제어 흐름 문 (Control Flow Statements)
2.1 if-else 문
public class SwitchDemo {
public static void main(String[] args) {
int month = 20;
if (month == 1) {
System.out.println("January");
} else if (month == 2) {
System.out.println("February");
} else if (month == 3) {
System.out.println("March");
} // 계속...
else {
System.out.println("잘못된 값입니다.");
}
}
}
2.2 switch 문과 Fall-Through
switch 문은 가능한 여러 실행 경로 중 하나를 선택할 수 있습니다. Fall-through는 break 문이 없을 때 발생하며, 다음 case가 계속 실행됩니다.
public class SwitchDemoFallThrough {
public static void main(String[] args) {
java.util.ArrayList<String> futureMonths = new java.util.ArrayList<>();
int month = 8;
switch (month) {
case 1: futureMonths.add("January");
case 2: futureMonths.add("February");
// ... (중략)
case 12: futureMonths.add("December"); break;
default: break;
}
if (futureMonths.isEmpty()) {
System.out.println("Invalid month number");
} else {
for (String monthName : futureMonths) {
System.out.println(monthName);
}
}
}
}
3. 반복문 (Loops)
3.1 for 문
public class EnhancedForDemo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.printf("i : %d, j : %d \n", i, j);
}
}
}
}
3.2 while 문과 do-while 문
// 무한 루프 예제
public class InfiniteLoop {
public static void main(String[] args) {
// while문을 이용한 무한 루프
while (true) {
// 반복 작업 수행
}
// for문을 이용한 무한 루프
for (; ; ) {
// 반복 작업 수행
}
}
}
public class DoWhileDemo {
public static void main(String[] args) {
int number = 3;
do {
System.out.println("Number is: " + number);
number--;
} while (number > 0);
}
}
4. 배열 (Array)
배열은 동일한 타입의 여러 요소를 저장할 수 있는 자료구조입니다.
int[] numbers = new int[5]; // 배열 선언
int[] moreNumbers = {1, 2, 3, 4, 5}; // 배열 초기화
// 배열 순회
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i * 2;
}
// 인헨스드 for 문
for (int num : moreNumbers) {
System.out.println(num);
}
5. 클래스와 객체 지향 프로그래밍 (OOP)
5.1 클래스 정의와 객체 생성
class Person {
int age;
String name;
void introduce() {
System.out.println("Hi, I'm " + name + " and I'm " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.name = "John";
person.age = 30;
person.introduce();
}
}
5.2 생성자 (Constructor)
class Person {
int age;
String name;
// 기본 생성자
Person() {
this.name = "Unknown";
this.age = 0;
}
// 매개변수를 받는 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
void introduce() {
System.out.println("Hi, I'm " + name + " and I'm " + age + " years old.");
}
}
5.3 static 키워드
• 클래스 변수와 메서드: static으로 선언된 변수나 메서드는 클래스 레벨에서 사용되며, 객체를 생성하지 않고도 접근할 수 있습니다.
class MathUtils {
static final double PI = 3.14159;
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("PI: " + MathUtils.PI);
System.out.println("Sum: " + MathUtils.add(5, 10));
}
}
6. 자바의 데이터 타입
6.1 기본형 (Primitive Types)
• 정수형: byte, short, int, long
• 부동 소수점형: float, double
• 문자형: char
• 논리형: boolean
6.2 참조형 (Reference Types)
• 클래스: 예: String, Person
• 배열: 예: int[], String[]
• 인터페이스: 예: Runnable
6.3 박싱과 언박싱
자바는 기본형과 대응되는 래퍼 클래스(wrapper class)를 제공합니다. 예를 들어, int는 Integer, float는 Float과 대응됩니다.
int num = 5;
Integer boxedNum = num; // 오토박싱
int unboxedNum = boxedNum; // 오토언박싱
7. 조건문 요약
• if-else 문: 조건에 따라 코드 블럭을 실행합니다.
• switch 문: 여러 가능한 실행 경로 중 하나를 선택합니다.
8. 반복문 요약
• for 문: 정해진 횟수만큼 반복합니다.
• while 문: 조건이 참인 동안 반복합니다.
• do-while 문: 조건이 참인지 검사하기 전에 한 번 실행됩니다.
9. 이중 반복문과 continue
• 이중 반복문: 반복문 안에 또 다른 반복문을 중첩하여 사용할 수 있습니다.
• continue 문: 반복문에서 현재 반복을 건너뛰고 다음 반복으로 진행합니다.
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
continue;
}
System.out.println("i: " + i + ", j: " + j);
}
}
10. 배열 순회와 인헨스드 for 문
배열의 각 요소에 접근하기 위해 반복문을 사용합니다. 인헨스드 for 문을 사용하면 배열을 더욱 간단하게 순회할 수 있습니다.
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
11. 메소드
• 메소드: 특정 기능을 수행하기 위한 코드의 묶음.
• 접근제어자 반환형 메소드명(전달값) 형태로 정의.
• 메소드 오버로딩: 같은 이름을 가진 메소드를 매개변수의 타입, 개수, 순서 등을 달리하여 여러 개 정의.
12. 클래스와 인스턴스
• 클래스 변수: static 키워드를 사용하여 선언되며, 클래스 전체에서 공유됩니다. 객체를 생성하지 않고도 클래스명으로 접근할 수 있습니다.
class Person {
static int population = 0; // 클래스 변수
Person() {
population++;
}
}
public class Main {
public static void main(String[] args) {
new Person();
new Person();
System.out.println("Population: " + Person.population);
}
}
• 인스턴스 변수: 클래스 내에 선언된 변수로, 각각의 객체가 개별적으로 가지는 변수입니다.
class Person {
String name; // 인스턴스 변수
int age; // 인스턴스 변수
Person(String name, int age) {
this.name = name;
this.age = age;
}
void introduce() {
System.out.println("Hi, I'm " + name + " and I'm " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Bob", 25);
person1.introduce();
person2.introduce();
}
}
• 클래스 메소드: static 키워드를 사용하여 정의된 메소드로, 객체를 생성하지 않고 클래스명으로 호출할 수 있습니다.
class MathUtils {
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
int sum = MathUtils.add(5, 10);
System.out.println("Sum: " + sum);
}
}
• 인스턴스 메소드: 클래스의 인스턴스에서 호출할 수 있는 메소드로, 객체의 상태를 변경하거나 정보를 제공하는 데 사용됩니다.
class Person {
String name;
void setName(String name) {
this.name = name;
}
String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("Charlie");
System.out.println(person.getName());
}
}
• this 키워드: 현재 인스턴스 자체를 참조하는 키워드로, 주로 인스턴스 변수와 지역 변수를 구분할 때 사용됩니다.
class Person {
String name;
Person(String name) {
this.name = name; // this를 사용하여 인스턴스 변수와 지역 변수 구분
}
}
13. 배열 (Array)와 반복문
• 배열 선언과 초기화: 배열은 같은 타입의 데이터를 저장할 수 있는 자료 구조입니다.
int[] numbers = new int[5]; // 크기가 5인 정수형 배열 선언
numbers[0] = 10; // 배열의 첫 번째 요소에 값 할당
int[] moreNumbers = {1, 2, 3, 4, 5}; // 배열 초기화
• 배열 순회: 반복문을 사용하여 배열의 모든 요소에 접근할 수 있습니다.
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
• 인헨스드 for 문: 배열이나 컬렉션을 간단하게 순회할 수 있는 반복문입니다.
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
14. 제어문 요약
• if-else 문: 조건에 따라 다른 코드 블록을 실행합니다.
int a = 10;
if (a > 5) {
System.out.println("a는 5보다 큽니다.");
} else {
System.out.println("a는 5보다 작거나 같습니다.");
}
• switch 문: 여러 실행 경로 중 하나를 선택할 수 있습니다.
int month = 3;
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
// 계속...
default: System.out.println("Invalid month");
}
• for 문: 반복 횟수가 정해져 있을 때 사용합니다.
for (int i = 0; i < 5; i++) {
System.out.println("i: " + i);
}
• while 문: 조건이 참일 때 반복합니다.
int i = 0;
while (i < 5) {
System.out.println("i: " + i);
i++;
}
• do-while 문: 최소 한 번 실행된 후 조건을 평가합니다.
int i = 0;
do {
System.out.println("i: " + i);
i++;
} while (i < 5);
15. 이중 반복문과 continue 문
• 이중 반복문: 반복문 안에 또 다른 반복문을 넣어 중첩하여 사용합니다.
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("i: " + i + ", j: " + j);
}
}
• continue 문: 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // i가 2일 때 반복을 건너뜁니다.
}
System.out.println("i: " + i);
}
16. 메소드 (Method)
• 메소드 정의: 특정 기능을 수행하는 코드의 묶음으로, 반환형 메소드명(매개변수) 형식으로 정의됩니다.
public void sayHello() {
System.out.println("Hello!");
}
public int add(int a, int b) {
return a + b;
}
• 메소드 오버로딩: 같은 이름의 메소드를 매개변수의 타입, 개수, 순서를 다르게 하여 여러 개 정의할 수 있습니다.
public int multiply(int a, int b) {
return a * b;
}
public double multiply(double a, double b) {
return a * b;
}
17. 자바의 데이터 타입 요약
• 기본형 데이터 타입: int, long, float, double, char, boolean 등.
• 참조형 데이터 타입: 클래스, 인터페이스, 배열 등 객체의 참조를 저장합니다.
• 박싱과 언박싱: 기본형 데이터를 객체로, 객체 데이터를 기본형으로 변환하는 과정입니다.
int num = 5;
Integer boxedNum = num; // 오토박싱
int unboxedNum = boxedNum; // 오토언박싱
이와 같은 정리를 통해 자바 프로그래밍의 기본적인 개념을 체계적으로 이해할 수 있으며, 실습을 통해 이러한 개념들을 적용할 수 있습니다.
'Java' 카테고리의 다른 글
Access Modifiers, Reference Types, and Abstract Classes (0) | 2024.07.03 |
---|---|
Interface, Superclass, and Call by Value (0) | 2024.07.03 |
C/C++ 프로그래밍 기초: 포인터, 반복문, 클래스, 그리고 Java의 데이터 타입 (2) | 2024.07.01 |
컴퓨터 디지털 논리 회로와 관련 개념 정리 (0) | 2024.06.26 |
컴퓨터 구조론 기초 (0) | 2024.06.25 |