Experience/LG CNS AM Inspire Camp 1기

[LG CNS AM Inspire Camp] 10. 자바(Java) 객체지향 프로그래밍 (배열, String, 클래스, 메서드, static)

chillmyh 2025. 2. 10. 16:54

 

1. 참조 자료형과 배열

1.1. 배열이란?

 

 

배열(Array)은 동일한 자료형의 데이터를 하나의 변수로 묶어 저장하는 자료구조입니다. Java에서 배열은 객체로 관리되며, 한 번 선언된 크기는 변경할 수 없습니다.

1.2. 배열 선언 및 초기화

배열을 선언하는 방식은 두 가지가 있습니다.

int[] a;   // 권장 방식
int a[];   // 가능하지만 비권장

배열을 생성하면서 값을 초기화하는 방법은 다음과 같습니다.

int[] a = new int[3];  // {0, 0, 0}으로 자동 초기화
int[] b = {3, 4, 5};   // 직접 값 대입
System.out.println(Arrays.toString(a)); // [0, 0, 0]

1.3. 배열의 메모리 구조

Java에서 배열은 스택(Stack) 메모리힙(Heap) 메모리를 사용합니다.

  • 스택 메모리: 기본 자료형(Primitive Type)은 값 자체가 저장되며, 참조 자료형은 참조 주소만 저장됩니다.
  • 힙 메모리: 실제 배열 객체가 저장되는 공간입니다.
int x = 10;
int y = x;  // 값 복사 (서로 독립적)

int[] a = {1, 2, 3};
int[] b = a;  // 주소 복사 (같은 객체를 참조)

1.4. 배열 데이터 접근 방법

배열 요소에 접근하는 방법은 여러 가지가 있습니다.

1) for 문을 사용한 접근

for (int i = 0; i < a.length; i++) {
    System.out.println(a[i]);
}

2) for-each 문을 사용한 접근

for (int element : a) {
    System.out.println(element);
}

2. 문자열(String) 객체

 

한 번 정의된 문자열은 변경할 수 없습니다.

이는, 문자열의 내용을 변경하면 문자열을 수정하는 것이 아니고, 새로운 문자열을 포함하고 있는 객체를 생성해서 사용하는 것을 의미합니다. (기존 문자열 객체는 버림)

2.1. String 객체 생성 방법

Java에서 문자열은 String 클래스로 관리됩니다. 문자열 객체를 생성하는 방법은 두 가지가 있습니다.

String str1 = new String("안녕"); // 새로운 객체 생성
String str2 = "안녕"; // 문자열 리터럴을 사용하여 생성

 

2.2. 문자열 비교

 

new 키워드를 이용해서 객체를 생성하면 항상 새로운 객체를 생성합니다.
문자열 리터러로 생성하면 동일한 문자열을 포함하고 있는 객체가 있으면 그 객체를 공유합니다.

 

== 연산자는 참조 주소를 비교하며, .equals() 메서드는 문자열의 내용을 비교합니다.

String s1 = "안녕";
String s2 = new String("안녕");
System.out.println(s1 == s2); // false (주소 비교)
System.out.println(s1.equals(s2)); // true (내용 비교)

2.3. 주요 String 메서드

3. 클래스와 객체

3.1. 클래스란?

클래스(Class)는 객체를 만들기 위한 설계도이며, 객체(Object)는 클래스의 인스턴스(Instance)입니다.

class Person {
    String name;
    int age;
    void introduce() {
        System.out.println("이름: " + name + ", 나이: " + age);
    }
}

3.2. 객체 생성 및 활용

Person p = new Person();
p.name = "홍길동";
p.age = 25;
p.introduce();

3.3. 생성자(Constructor)

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

4. 메서드와 오버로딩

4.1. 메서드란?

메서드는 특정 작업을 수행하는 코드 블록입니다. 메서드는 재사용성과 코드의 가독성을 높이는 역할을 합니다.

class Calculator {
    int add(int a, int b) {
        return a + b;
    }
}

4.2. 메서드 오버로딩 (Overloading)

메서드 오버로딩은 동일한 이름의 메서드를 매개변수의 개수 또는 타입을 다르게 정의하는 기능입니다.

class Printer {
    void print() {
        System.out.println("출력 없음");
    }
    void print(String msg) {
        System.out.println(msg);
    }
}

 

5. static 키워드

5.1. static 변수와 메서드

static 키워드는 클래스 단위로 공유되는 변수와 메서드를 정의할 때 사용합니다.

class Counter {
    static int count = 0;
    Counter() {
        count++;
    }
}

5.2. static 메서드 특징

  • 인스턴스 생성 없이 호출 가능
  • 인스턴스 변수 사용 불가
class MathUtil {
    static int square(int num) {
        return num * num;
    }
}
System.out.println(MathUtil.square(4)); // 16

 

또한, 정적 메서드 내에서는 정적 필드 또는 정적 메서드만 사용이 가능합니다.
this 키워드를 사용할 수 없습니다.

 

6. 마무리

이번 강의를 통해 Java의 참조 자료형(배열, String), 객체 지향 프로그래밍 개념(클래스, 객체, 생성자, 상속, 다형성), 메서드 오버로딩 및 오버라이딩, static 키워드 등의 개념을 학습하였습니다.

 


이 글은 LG CNS AM Inspire Camp 1기 진행 중 Obsidian에 정리해뒀던 글을 블로그에 옮긴 글입니다.