본문 바로가기
기타/백엔드 기초

자바 Java | 객체지향 프로그래밍(OOP)의 핵심 개념: 객체, 클래스, 메소드, 참조 변수에 대한 이해와 활용 방법

by YUNI Heo 2023. 2. 16.
반응형

 

✅ 객체지향언어(Object-Oriented Programming Language)

객체지향언어는 프로그램을 객체의 집합으로 구성하는 개념을 기반으로 한다.

코드를 모듈화 하고 각 객체들의 역할과 책임을 분리하여 코드의 재사용성과 관리성을 향상한다.

 

  • Java: 객체지향 프로그래밍 언어로, 안정성, 이식성, 보안성 등이 뛰어나며, JVM을 이용하여 운영체제나 하드웨어와 독립적으로 실행 가능한 바이트 코드를 생성한다.
  • C++: C 언어에 객체지향 프로그래밍 기능을 추가한 언어로, 시스템 프로그래밍, 임베디드 시스템, 게임 등에 사용한다.
  • Python: 간결하고 읽기 쉬운 문법으로 인기 있는 동적 타이핑 언어로, 객체지향 프로그래밍뿐만 아니라 다양한 프로그래밍 패러다임을 지원한다. 

 

💡 객체지향언어의 주요 특징

  • 캡슐화(encapsulation): 객체 내부의 데이터와 메서드를 외부에서 접근할 수 없도록 보호하고, 외부에서는 객체의 인터페이스만을 사용하여 객체와 상호작용한다.
  • 상속(inheritance): 이미 정의된 클래스를 기반으로 새로운 클래스를 정의한다.
  • 다형성(polymorphism): 같은 이름의 메서드를 여러 객체에서 사용할 수 있도록 하고, 객체의 타입에 따라 다른 동작을 수행한다.

 

✅ 객체(Object)

객체지향 프로그래밍은 데이터와 이를 처리하는 메서드(함수)를 하나의 단위로 묶는 객체 기반이다.

  • 객체는 자신의 속성(attribute) 행위(behavior)를 가진다.
  • 속성(attribute)과 행위(behavior)를 클래스(Class)에 정의한다.

 

💡 속성(Attribute): 객체의 상태 정보

객체의 속성은 객체의 상태 정보이다. 

 

자바에서 객체의 속성은 멤버 변수(Member Variable)로 정의한다. 

  • 멤버 변수(Member Variable)는 클래스 내부에 선언한다.
  • 멤버 변수(Member Variable)는 인스턴스가 생성될 때마다 각각의 인스턴스에 대해 독립적인 공간을 가진다.
class Person {
  String name; // 객체의 이름
  int age;     // 객체의 나이
}

 

💡 행위(Behavior): 객체의 동작 정보

객체의 행위는 객체의 동작 정보이다. 

 

자바에서 객체의 행위는 메서드(Method)로 정의한다. 

  • 메서드(Method)는 클래스 내부에 선언한다.
  • 메서드(Method)는 객체의 상태 정보를 조작하거나 다른 객체와 상호작용한다.
class Person {
  // 객체의 이름
  String name;

  // 객체의 나이
  int age;

  // 객체의 정보를 출력하는 메소드
  void printInfo() {
    System.out.println("이름: " + name);
    System.out.println("나이: " + age);
  }
}

 

✅ 클래스(Class)

클래스(Class)는 객체를 생성하기 위한 설계도이다.

  • 객체의 속성(attribute)과 행위(behavior)를 정의한다.
  • 객체의 속성(attribute)과 행위(behavior)를 구현하는 메서드를 포함한다.
  • 객체를 생성할 때 초기값을 설정하는 객체의 생성자(constructor)를 포함한다.
[접근 제어자] class 클래스 이름 {
  // 멤버 변수(속성)
  // 생성자(Constructor)
  // 메소드(행위)
}

 

💡 Static 클래스 메서드 (Class Method)

  • 클래스 레벨에서 정의되는 메서드이다.
  • 객체를 생성하지 않고도 클래스명을 통해 직접 접근할 수 있다.

  • 객체의 상태나 속성과 무관한 독립적인 기능을 수행하는 메서드로 사용한다.
  •  내부의 정적 변수(static variable)와 함께 사용되어, 상수(constant) 값을 저장하거나 여러 인스턴스들이 공유해야 하는 값을 저장한다.
  • 인스턴스 메서드에서 사용할 수 없는 클래스 레벨의 특정한 데이터를 조작하거나 반환한다.

  • Math 클래스의 sqrt() 메서드
double result = Math.sqrt(25);

  • Arrays 클래스의 sort() 메서드
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5};
Arrays.sort(arr);

  • String 클래스의 valueOf() 메서드
int num = 42;
String str = String.valueOf(num);

 

💡 인스턴스 메서드 (Instance Method)

인스턴스는 클래스로부터 생성된 객체이다.

  • 클래스의 인스턴스(객체) 레벨에서 동작하는 메서드이다.
  • 클래스의 인스턴스(객체)를 통하여 호출되며, 호출할 때마다 새로운 객체를 생성하여 메서드를 실행한다.

  • 객체의 상태나 속성을 조작하는 메서드로 사용한다.

  • String 클래스의 length() 메서드
String str = "Hello World!";
int length = str.length();

  • ArrayList 클래스의 add() 메서드
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

  • Scanner 클래스의 next() 메서드 
Scanner scanner = new Scanner(System.in);
String input = scanner.next();

 

💡 참조 변수 this

  • 객체 자신을 가리키는 참조 변수이다.
  • 해당 메서드를 호출한 객체를 가리킨다.

Static 클래스 메서드에서는 this 키워드를 사용할 수 없다.

  • Static 메서드는 인스턴스에 의존하지 않고 클래스 자체에서 호출한다.
  • Static 메서드에서는 해당 클래스의 인스턴스 변수에 직접 접근할 수 없다.
  • 따라서 this 참조 변수를 사용할 수 없다.
public class Calculator {
    private static int result;
    
    public static void add(int num) {
        result += num; // 클래스 변수에 직접 접근한다.
    }
    
    public static void subtract(int num) {
        result -= num; // 클래스 변수에 직접 접근한다.
    }
    
    public static int getResult() {
        return result; // 클래스 변수를 반환한다.
    }
}

this 키워드를 사용하여 인스턴스 참조하기

  • this 참조 변수를 사용하여 객체의 인스턴스 변수에 접근한다.
  • this 참조 변수를 사용하여 인스턴스 메서드에서 다른 인스턴스 메서드를 호출한다.
public class Person {
    private String name;
    private int age;
    
    public void setName(String name) {
        this.name = name; // this 키워드를 사용하여 인스턴스 변수를 참조합니다.
    }
    
    public void setAge(int age) {
        this.age = age; // this 키워드를 사용하여 인스턴스 변수를 참조합니다.
    }
    
    public void printInfo() {
        System.out.println("이름: " + this.name); // this 키워드를 사용하여 인스턴스 변수를 참조합니다.
        System.out.println("나이: " + this.age); // this 키워드를 사용하여 인스턴스 변수를 참조합니다.
    }
}
반응형