[내일배움캠프] - DAY8 자바에 대해 알아보자-2

2026. 1. 8. 21:22·TIL & 트러블 슈팅

조건문

조건문이란 개발자가 작성한 코드 조건에 따라 코드의 실행 흐름을 다르게 동작하도록 제어 해주는 것이라고 할 수 있습니다. 아래에서 한번 알아보도록 하겠습니다.

 

if문

조건식에 조건을 입력하며, 조건이 참(true) 일 경우 코드가 실행됩니다.

if (조건식) {
    // 조건식이 참(true) 일 때 실행됩니다.
}

 

if - else문

조건이 참(true) 일 경우 if블록에 있는 코드가 실행되며, 만약 조건이 거짓(false) 일 경우 else블록에 있는 코드가 실행됩니다.

if (조건식) {
    // 조건식이 참(true) 일 때 실행됩니다.
} else {
    // 조건식이 거짓(false) 일 때 실행됩니다.
}

 

if - else if문

여러 조건을 순차적으로 체크 하며, 조건이 만족되면 해당 블록을 실행합니다.

if (조건식1) {
    // 조건식1이 참(true)일 때 실행됩니다.
} else if (조건식2) {
    // 조건식2가 참(true) 일 때 실행됩니다.
} else {
    // 위의 모든 조건이 해당되지 않고 거짓(false) 일 때 실행됩니다.
}

반복문

반복문은 같은 코드를 조건이 만족하는 동안 계속 실행하는 문법입니다.

 

for문

for문은 반복 횟수가 정해져 있을 때 사용됩니다.

for (초기화; 조건; 증감식) {
    // 반복할 코드
}

 

예제

아래에는 for문을 사용하여 1부터 5까지 더하는 코드를 예제로 작성해보겠습니다.

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            System.out.println(i);  // 1, 2, 3, 4, 5
        }
    }
}

 

while문

while문은 반복 횟수가 명확하지 않거나 조건에 따라 반복을 계속할 때 사용됩니다. 조건이 참(true)일 때만 반복문이 실행됩니다.

while (조건) {
    // 반복할 코드
}

 

예제

아래에는 while문을 사용하여 1부터 5까지 더하는 코드를 예제로 작성해보겠습니다.

public class Main {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 5) {
            System.out.println(i);  // 1, 2, 3, 4, 5
            i++;  // i 값을 증가시켜야 무한루프를 피할 수 있음
        }
    }
}

 

do ~ while문

do-while문은 반드시 한 번은 실행한 후 조건을 확인 하는 반복문입니다. 반복 조건을 먼저 확인하는 while문과 다르게, do~while문은 조건을 확인 하기 전 적어도 한 번은 실행된다는 특징이 있습니다.

do {
    // 반복할 코드
} while (조건);

 

예제

아래에는 do~while문을 사용하여 1부터 5까지 더하는 코드를 예제로 작성해보겠습니다.

public class Main {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println(i);  // 1, 2, 3, 4, 5
            i++;  // i 값을 증가시켜야 무한루프를 피할 수 있음
        } while (i <= 5);
    }
}

 

continue와 break

continue 와 break 를 사용하여 반복문을 제어할 수 있습니다.

 

continue

continue 는 현재 반복을 건너뛰고 다음 반복을 실행합니다. 특정 조건에서 반복문을 건너뛰어야할 때 사용합니다.

1부터 5까지 숫자 중 짝수만 출력하는 코드

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            if (i % 2 != 0) {
                continue;  // i가 홀수일 경우 반복문 건너뜀
            }
            System.out.println(i);  // 2, 4
        }
    }
}

 

break

break는 실행되는 반복문을 즉시 종료 합니다. 주로 특정 조건이 만족되어 반복문을 빠져나올 때 사용됩니다.

1부터 5까지의 숫자 중 3이 출력 되면 반복을 종료하는 코드

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            if (i == 3) {
                break;  // i가 3이면 반복문 종료
            }
            System.out.println(i);  // 1, 2
        }
    }
}

함수(function)

자바에서의 함수는 “특정작업을 수행하는 독립적인 코드블록” 을 말합니다. 쉽게 말해 어떠한 기능을 수행하는 코드를 묶어서 하나의 코드를 작성한다고 가정합시다. 그 후 필요할 때 마다 해당 함수를 불러서 연산을 하는 것 입니다. 이 처럼 함수(function)는 어떤 기능을 수행하도록 미리 구현 후 필요할 때 마다 호출하여 사용할 수 있습니다.

 

함수의 장점

  • 코드의 재사용성
  • 코드의 가독성 향상
  • 다형성
  • 디버깅 및 유지보수 용이

함수의 입력과 반환

함수는 이름이 있고 입력 값과 결과 값을 갖습니다. 아래 코드로 한번 자세히 알아보도록 합시다.

 

함수 정의하기

int add (int num1, int num2) { // 여기서 'int'는 함수 반환형, 'add'는 함수 이름, '(int num1, int num2)'는 매개변수 입니다.
	int result;
	result = num1 + num2;
	return result; // 'return' 예약어
}

배열

배열이란? 여러개의 변수들을 작성할 때 보다 효율적으로 사용할 수 있는 자료형을 배열 이라고 합니다. 배열을 사용하면 자료형이 같은 자료 여러개를 한번에 관리할 수 있습니다. 쉽게 말해 배열은 자료가 연속으로 나열 된 자료 구조 입니다.

 

배열 선언과 초기화

배열을 사용할 때 먼저 배열을 선언해야 합니다. 배열도 변수와 같이 자료형을 함께 선언합니다.

 

배열 선언

자료형[] 배열이름 = new 자료형[개수];
자료형 배열이름[] = new 자료형[개수];

 

배열 초기화

자료형[] 배열이름 = new 자료형[] {1,2,3,..}; /* 초기화 할 때 자료형[] 안에 갯수를
입력하면 오류가 발생합니다. */

 

선언과 동시에 초기화

자료형[] 배열이름 = {1,2,3,..}; //

주의 : 배열의 자료형을 먼저 선언하고 초기화 하는 경우엔 new 자료형[ ] 생략이 불가합니다.

 

 

선언한 배열의 각 요소에 값을 넣을 때 나 배열 요소에 있는 값을 가져올 때 는 [ ] 를 사용합니다.

studentIDs[0] = 10; // 배열의 첫번째 요소에 값 10을 저장

 

배열의 한계점

배열은 편리하지만 아래와 같은 제한이 있습니다.

 

  • 길이가 고정됨
  • 한 번 크기를 정하면 변경 불가
  • → new int[5] 하면 크기는 5로 고정
  • → 더 많은 데이터를 넣고 싶으면 새 배열을 만들어야 합니다.

 

  • 삽입/삭제가 번거로움(값을 옮기거나 복사해야 합니다.)
  • 중간에 값을 추가하거나 삭제하려면 직접 코드를 짜야 합니다.

 

  • 기본 타입/참조 타입만 저장 가능
  • → int[], String[] 등 한 가지 타입만 저장 가능 합니다.

배열과 반복문 (for문, 향상된 for문)

배열은 반복문과 함께 자주 사용됩니다.

int[] numbers = {1, 2, 3, 4, 5};

// 일반 for문
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

// 향상된 for문 (for-each)
for (int num : numbers) {
    System.out.println(num);
}

향상된 for문은 배열의 모든 요소를 순서대로 처리할 때 편리합니다.

[!] 인덱스를 사용해야 할 땐 일반 for문이 필요합니다.


배열은 참조 타입

배열은 객체이기 때문에 참조 타입입니다.

int[] a = {1, 2, 3};
int[] b = a; // b도 같은 배열을 참조

b[0] = 100;
System.out.println(a[0]); // 100이 출력됨

[!] 즉, a와 b는 같은 배열을 가리키고 있음에 주의해야 합니다.


객체(Object)

객체(Object) 란 무엇일까요? 우리의 주변에도 여러가지의 객체가있습니다. 자동차도 객체고 우리가 흔히 사용하는 스마트폰도 객체가 될 수 있습니다. 프로그래밍에서의 객체는 변수, 함수, 자료구조, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다. 객체지향 프로그래밍에서의 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인스턴스라고 지칭합니다.


클래스(class)

클래스(class)는 객체를 생성하기 위한 설계도 또는 템플릿이라고 할 수 있습니다. 클래스는 객체가 가질 수 있는 속성(변수)과 동작(메서드)을 정의 합니다. 실제로 사용할 수 있는 객체는 클래스에서 정의된 속성과 동작을 따릅니다.

 

클래스 선언

사용하고자 하는 객체가 있다면, 그 객체의 이름을 하나 정하고 이것을 클래스 이름으로 지정합니다. 자동차 객체의 클래스는 ‘Car’로 지정하겠습니다. 클래스 이름은 다른 클래스와 식별할 목적으로 사용되어 자바의 ‘식별자 작성 규칙’에 따라 만들어야합니다.

 

  • 하나 이상의 문자로 이루어져야 합니다. ex: Car, Computer
  • 예약어는 사용할 수 없습니다. ex: int(X), bolean(X)
  • ‘$’, ‘_’ 특수문자만 사용할 수 있습니다. ex: $photo
  • 첫 번째 글자로 숫자를 사용할 수 없습니다. ex: 3Student(X)
  • 단어가 여러개일 경우 카멜표기법을 사용합니다. ex: MoneyCount, UserInfo
public class 클래스이름 {
}

public class 키워드는 클래스를 선언할 때 사용합니다. (public : 접근 제어자)

일반적으로 소스 파일당 하나의 클래스를 선언하지만, 아래와 같이 두 개 이상의 클래스도 선언이 가능합니다.

 

public class Car {
}
class Tire {
}

두 개 이상의 클래스가 선언된 소스 파일을 컴파일 하면 바이트 코드 파일 ( .class )은 클래스를 선언한 개수 만큼 생성됩니다.

주의 : 파일 이름과 동일한 이름의 클래스 선언에만 public 접근 제어자를 사용할 수 있습니다.


인스턴스

인스턴스는 클래스로 부터 생성된 객체를 의미합니다. 쉽게 말하자면 클래스에서 객체를 생성하면 이 객체가 클래스의 인스턴스가 됩니다. 또한 객체와 인스턴스는 비슷한 의미로 사용됩니다. 따라서 두 용어를 혼용하여 쓰기도 하지만, 객체는 모든 인스턴스를 포괄하는 넓은 의미를 갖고 있고 인스턴스는 해당 객체가 어떤 클래스로 부터 생성된것인지를 강조합니다.

 

인스턴스 생성

자바에서 인스턴스는 "new" 키워드를 사용해 생성됩니다. "new" 키워드는 클래스를 메모리에 로드하고, 해당 클래스의 생성자를 호출하여 객체를 초기화하는 역할을 합니다.

클래스명 객체명 = new 클래스명();  // 클래스에서 객체 생성

Car car1 = new Car("Tesla Model S", 2023); // 예시

 

인스턴스의 특징

  • 고유한 상태(데이터)를 가짐.
  • 메소드를 호출하여 행동을 수행
  • 메모리 공간을 차지
  • 객체 지향적 특성

요약

  • 클래스가 하나의 틀이라고 가정한다면, 인스턴스는 그 틀을 통해 생성된 객체들을 해당 클래스의 인스턴스라고 합니다.
  • 인스턴스는 클래스에서 "new" 키워드로 생성된 객체를 의미하며, 해당 객체는 클래스에서 정의된 변수와 메소드를 바탕으로 독립적인 상태와 행동을 가집니다.
  • 자바에서의 클래스는 설계도 역할을 하고, 인스턴스는 실제 객체가 되어 프로그램에서 다양한 작업을 수행 합니다.

생성자

생성자란? “new” 연산자를 통해서 인스턴스를 생성할 때 반드시 호출 되고 제일 먼저 실행되는 일종의 메서드 입니다. (하지만 메서드와 다르긴 합니다.) 생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화 하는 역할을 합니다.

 

생성자 만들기

package constructor;

public class Person {
	String name;
	float height;
	float weight;
}

 

생성자 테스트 하기

package constructor;

public class PersonTest {
	public static void main(String[]args) {
		Person personLee = new Person();
	}
}

디폴트 생성자

생성자는 클래스를 생성할 때만 호출합니다. 생성자 이름은 클래스 이름과 같고, 생성자는 반환 값이 없습니다. 생성자가 없는 클래스는 클래스 파일을 컴파일 할 때 자바 컴파일러에서 자동적으로 생성자를 만듭니다. 이런식으로 자동으로 만드는 생성자를 디폴트 생성자라고 합니다. 디폴트 생성자는 매개 변수가 와 구현 코드가 없습니다. 프로그래머가 디폴트 생성자를 직접 만드는 경우에는 필요에 따라 직접 코드를 구현 할 수 도 있습니다.

package constructor;

public class Person {
	String name;
	float height;
	float weight;
	
	public Person() {} // <- 자동적으로 만들어진 디폴트 생성자
}

오버로딩 생성자 (생성자 중복 정의)

생성자는 같은 이름(클래스 이름)으로 여러 개 정의 가능하며, 매개변수의 개수나 타입이 다르면 각각 다른 생성자로 인식됩니다. 이를 생성자 오버로딩(Constructor Overloading) 이라고 합니다.

public class Book {
    String title;
    int price;

    // 생성자 1
    public Book() {
        this.title = "제목 없음";
        this.price = 0;
    }

    // 생성자 2
    public Book(String title) {
        this.title = title;
        this.price = 0;
    }

    // 생성자 3
    public Book(String title, int price) {
        this.title = title;
        this.price = price;
    }
}

 

사용자가 원하는 방식대로 객체를 다양하게 만들 수 있어 유연성이 높아집니다.


this()로 생성자 내부에서 다른 생성자 호출하기

같은 클래스 내의 다른 생성자를 호출할 때는 this() 키워드를 사용합니다. 이 호출은 반드시 생성자 코드의 첫 줄에 위치해야 하며, 그렇지 않으면 컴파일 오류가 발생하게 됩니다.

public class Student {
    String name;
    int age;

    public Student() {
        this("이름 없음", 0); // 다른 생성자 호출
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

생성자 중복 코드 제거에 유용하며, 유지보수성이 좋아집니다.


객체 생성 시 생성자 실행 순서 이해

  • 객체를 생성하면 생성자가 가장 먼저 실행됩니다.
  • 생성자는 객체의 초기값을 설정하기 위해 주로 사용됩니다.
  • 생성자가 없으면 컴파일러가 기본 생성자(default constructor) 를 자동으로 생성해 주지만,
  • 사용자 정의 생성자를 하나라도 만들면 기본 생성자는 자동으로 생성되지 않습니다.
public class Person {
    String name;

    // 사용자 정의 생성자만 있을 경우
    public Person(String name) {
        this.name = name;
    }

    // Person p = new Person(); // 오류 발생 (기본 생성자 없음)
}

주의 : 기본 생성자가 꼭 필요한 경우 명시적으로 작성해야 합니다.


초기화 블록 vs 생성자

  • 생성자는 매번 객체가 생성될 때 호출됨
  • 초기화 블록({})은 생성자보다 먼저 실행되며, 공통 초기화 코드가 있을 때 사용함
public class Sample {
    int x;

    {
        x = 10; // 초기화 블록
    }

    public Sample() {
        x += 5;
    }
}

// x는 15로 초기화됨

생성자의 접근 제어자

일반적으로 생성자는 public 으로 선언되지만, 특정 상황에서는 private 으로 선언해 외부에서 객체 생성을 막을 수 있습니다. 이 방식은 주로 싱글톤(Singleton) 패턴 구현에 사용됩니다.

public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {} // 외부에서 생성 불가

    public static Singleton getInstance() {
        return instance;
    }
}

 


생성자와 상속의 관계

자식 클래스의 생성자가 실행될 때는 가장 먼저 부모 클래스의 생성자가 호출되어야 합니다. 만약 개발자가 이를 명시하지 않으면, 컴파일러가 자동으로 super()를 삽입하여 부모 클래스의 기본 생성자를 호출하게 됩니다.

class Parent {
    public Parent() {
        System.out.println("부모 생성자 호출");
    }
}

class Child extends Parent {
    public Child() {
        super(); // 생략 가능
        System.out.println("자식 생성자 호출");
    }
}
// 자식 생성자가 실행되기 전에 항상 부모 생성자가 먼저 호출됨

[ 오늘 배운 학습 ]

 

1. 조건문과 반복문

2. 함수

3. 배열

4. 클래스와 객체

5. 생성자

 

[ 다음 학습 계획 ]

 

1. 접근제어자

2. 패키지

3. 상속과 다형성

4. 추상클래스

5. 인터페이스

6. 예외처리

'TIL & 트러블 슈팅' 카테고리의 다른 글

[내일배움캠프] - DAY10 계산기 만들기  (0) 2026.01.13
[내일배움캠프] - DAY9 플로우차트  (0) 2026.01.12
[내일배움캠프] - DAY7 자바에 대해 알아보자-1  (0) 2026.01.08
[내일배움캠프] - DAY6 Vim 기반 Git 사용법  (0) 2026.01.06
[내일배움캠프] - DAY5 협업을 위한 GIT 알아보기  (0) 2026.01.06
'TIL & 트러블 슈팅' 카테고리의 다른 글
  • [내일배움캠프] - DAY10 계산기 만들기
  • [내일배움캠프] - DAY9 플로우차트
  • [내일배움캠프] - DAY7 자바에 대해 알아보자-1
  • [내일배움캠프] - DAY6 Vim 기반 Git 사용법
N_HYUN
N_HYUN
안녕하세요! 현이의 개발 공부방입니다.
  • N_HYUN
    현이의 개발 공부방
    N_HYUN
  • 전체
    오늘
    어제
    • 분류 전체보기 (29)
      • FrontEnd (0)
      • BackEnd (0)
        • Java (0)
      • DataBase (1)
      • TIL & 트러블 슈팅 (24)
      • Etc (4)
        • Theoretical Computer Scienc.. (1)
        • Web & CS (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
N_HYUN
[내일배움캠프] - DAY8 자바에 대해 알아보자-2
상단으로

티스토리툴바