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.