Post

Java 언어 기초 - 02

Java의 배열, 메서드, 접근자, 클래스와 객체, 생성자, 상속, 인터페이스까지 기본 개념 정리글

Java 언어 기초 - 02

Java 배열

배열이란?

  • 같은 자료형의 여러 값을 하나의 집합으로 저장하는 자료구조
  • 인덱스를 이용해 각 요소에 접근 (0부터 시작)

선언과 생성

1
2
int[] numbers = new int[5];
String[] names = new String[3];

초기화

1
2
int[] scores = {90, 80, 70};
String[] fruits = {"Apple", "Banana", "Orange"};

요소 접근

1
2
3
4
int[] arr = {1, 2, 3};
System.out.println(arr[0]); // 1
arr[1] = 10;
System.out.println(arr[1]); // 10

배열 길이

1
2
int[] data = new int[4];
System.out.println(data.length); // 4

반복문과 배열

1
2
3
4
int[] nums = {1, 2, 3, 4, 5};
for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}

특징

  • 고정된 크기로 선언 후 변경 불가
  • 같은 타입의 값만 저장 가능
  • 배열과 반복문을 함께 사용하면 데이터를 효율적으로 처리 가능

Java 메서드

메서드란?

  • 특정 작업을 수행하는 코드 블록
  • 코드 재사용성과 가독성을 높여줌

메서드 선언 형식

1
2
3
4
[접근제어자] [static] 반환형 메서드이름(매개변수) {
    // 실행 코드
    return ;
}

예제

1
2
3
4
5
6
public static int add(int a, int b) {
    return a + b;
}

int result = add(3, 5);
System.out.println(result); // 8

반환형

  • 메서드가 반환하는 데이터의 타입
  • 반환값이 없으면 void 사용

매개변수

  • 메서드가 호출될 때 전달받는 값
  • 여러 개 선언 가능

오버로딩

  • 같은 이름의 메서드를 매개변수 타입이나 개수를 다르게 선언
1
2
3
4
5
6
7
public int add(int a, int b) {
    return a + b;
}

public double add(double a, double b) {
    return a + b;
}

특징

  • 모듈화된 코드 작성 가능
  • 재사용성과 유지보수성 향상

Java 접근자(Access Modifier)

접근자란?

  • 클래스, 변수, 메서드 등에 대한 접근 범위를 지정하는 키워드
  • 캡슐화(Encapsulation)의 핵심 도구

종류와 특징

접근자같은 클래스같은 패키지자식 클래스전체(외부)
public
protected
default(생략)
private

public

  • 어디서든 접근 가능
1
public int id;

protected

  • 같은 패키지 + 상속받은 자식 클래스에서 접근 가능
1
protected String name;

default (package-private)

  • 같은 패키지 내부에서만 접근 가능
1
int age; // default

private

  • 같은 클래스 내부에서만 접근 가능
1
private double salary;

예제

1
2
3
4
5
6
7
8
9
10
public class Employee {
    public String name;
    protected String department;
    String position; // default
    private int salary;

    public void printInfo() {
        System.out.println(name + ", " + department + ", " + position + ", " + salary);
    }
}

캡슐화와 getter/setter

1
2
3
4
5
6
7
8
9
10
11
public class User {
    private String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

요약

  • 접근자는 정보 은닉과 보안을 위해 사용
  • 필요 최소한만 공개 → 유지보수성과 안정성 향상

Java 클래스와 객체

클래스란?

  • 객체를 생성하기 위한 설계도
  • 변수(필드)와 메서드로 구성

객체란?

  • 클래스를 기반으로 생성된 실체

클래스 선언 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Car {
    String color;
    int speed;

    void drive() {
        System.out.println("자동차가 달립니다.");
    }

    void drive(int a) {
        System.out.println(a +"km 자동차가 달립니다.");
    }

    public static void main(String[] args){
        drive(3);
    }
}

객체 생성과 사용

1
2
3
4
Car myCar = new Car();
myCar.color = "red";
myCar.speed = 100;
myCar.drive();

this 키워드

1
2
3
4
5
6
7
public class Person {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

특징

  • 객체 지향 프로그램의 기본 단위
  • 캡슐화, 상속, 다형성 등의 OOP 개념과 연계

생성자

생성자란?

  • 객체 생성 시 호출되는 특별한 메서드
  • 객체의 초기화 작업 담당
  • 클래스 이름과 같고 반환 타입 없음

기본 생성자

1
2
3
4
5
public class Car {
    public Car() {
        System.out.println("기본 생성자 호출");
    }
}

매개변수 생성자

1
2
3
4
5
6
7
public class Car {
    String model;

    public Car(String model) {
        this.model = model;
    }
}

this 키워드

1
2
3
public Car(String model) {
    this.model = model;
}

오버로딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Car {
    String model;
    int year;

    public Car() {
        this("기본 모델", 2023);
    }

    public Car(String model) {
        this(model, 2023);
    }

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }
}

활용 예시

1
2
Car myCar = new Car("소나타", 2022);
System.out.println(myCar.model);

요약

  • 생성자는 객체 초기화 담당
  • 기본 생성자와 매개변수 생성자 구분
  • 오버로딩으로 다양한 초기화 방식 제공

Java 상속

상속이란?

  • 기존 클래스를 기반으로 새로운 클래스를 작성
  • 코드 재사용성과 유지보수성 향상

기본 구조

1
2
3
4
5
6
7
class Parent {
    // 필드와 메서드
}

class Child extends Parent {
    // 추가 필드와 메서드
}

메서드 오버라이딩

1
2
3
4
5
6
7
8
9
10
11
12
class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹");
    }
}

super 키워드

1
2
3
4
5
6
7
8
9
10
11
12
class Parent {
    void show() {
        System.out.println("부모 클래스 메서드");
    }
}

class Child extends Parent {
    void show() {
        super.show();
        System.out.println("자식 클래스 메서드");
    }
}

생성자와 상속

1
2
3
4
5
6
7
8
9
10
11
class Parent {
    Parent() {
        System.out.println("Parent 생성자 호출");
    }
}

class Child extends Parent {
    Child() {
        System.out.println("Child 생성자 호출");
    }
}

장점

  • 코드 재사용성
  • 유지보수 용이

Java 인터페이스

인터페이스란?

  • 메서드 선언만 포함, 구현은 없음
  • 다형성과 표준화된 규약 제공

특징

  • 다중 구현 가능
  • 모든 메서드는 public abstract
  • 모든 필드는 public static final

기본 구조

1
2
3
4
5
6
7
8
9
interface 인터페이스명 {
    반환형 메서드명();
}

class 클래스명 implements 인터페이스명 {
    public 반환형 메서드명() {
        // 구현
    }
}

예제

1
2
3
4
5
6
7
8
9
interface Flyable {
    void fly();
}

class Bird implements Flyable {
    public void fly() {
        System.out.println("새가 날아갑니다");
    }
}

다중 인터페이스 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface Swim {
    void swim();
}

interface Walk {
    void walk();
}

class Duck implements Swim, Walk {
    public void swim() {
        System.out.println("오리가 헤엄칩니다");
    }

    public void walk() {
        System.out.println("오리가 걷습니다");
    }
}

인터페이스와 추상 클래스 차이

구분인터페이스추상 클래스
목적기능 규약 정의공통 기능 + 일부 구현
필드상수만 가능변수 선언 가능
메서드 구현 여부구현 불가구현 가능
다중 구현가능불가

장점

  • 다양한 객체 간 표준화된 통신 방식 제공
  • 유연한 설계와 확장성 제공
This post is licensed under CC BY 4.0 by the author.