Loading the catalog…
Loading the catalog…
자바를 공부하다 보면 객체(Object), 클래스(Class), 인스턴스(Instance), 메서드(Method) 같은 용어를 자주 만나게 된다. 처음에는 비슷해 보이는 용어가 많아서 헷갈리지만, 각각의 관계를 연결해서 생각하면 조금씩 구분할 수 있다. 이번 글에서는 객체지향이 무엇인지 부터 시작해서 객체와 클래스의 관계, 인스턴스, 클래스의 구성 요소 까지 정리해 보려고 한다. 1. 객체지향이란? 먼저 객체(Object) 가 무엇인지 알아보자. 프로그래밍에서는 프로그램에서 표현하고자 하는 대상을 객체 로 표현할 수 있다. 예를 들어 사람, 자동차, 강아지, 책과 같은 실제 존재뿐만 아니라 주문, 계좌, 날짜처럼 눈에 보이지 않는 개념도 객체로 표현할 수 있다. 객체는 크게 상태(State) 와 행동(Behavior) 을 가진다. 예를 들어 Cat 이라는 고양이 객체가 있다고 생각해 보자. 상태(State): 이름, 나이, 색상 등 행동(Behavior): 울기, 먹기, 움직이기 등 자바에서는 이러한 상태와 행동을 각각 다음과 같이 표현할 수 있다. 객체의 특징 자바에서 표현 상태(State) 필드(Field) 행동(Behavior) 메서드(Method) 즉, 객체는 자신의 상태를 가지고 있으며, 특정한 행동을 수행할 수 있는 하나의 단위 라고 생각할 수 있다. 2. 객체지향 프로그래밍(OOP)이란? 그렇다면 객체지향 프로그래밍(Object-Oriented Programming, OOP) 은 무엇일까? 객체지향 프로그래밍은 프로그램을 여러 개의 객체로 나누고, 객체들이 서로 상호작용하도록 설계하는 프로그래밍 방식 이다. 하나의 거대한 코드에 모든 기능을 작성하는 것이 아니라, 각각의 역할을 가진 객체를 만들고 객체들이 서로 협력하도록 구성하는 것이다. 예를 들어 쇼핑몰 프로그램을 만든다면 다음과 같이 역할을 나눌 수 있다. 회원 객체 └─ 회원 정보 관리 상품 객체 └─ 상품 정보 관리 주문 객체 └─ 주문 처리 결제 객체 └─ 결제 처리 각 객체가 자신의 역할을 담당하도록 만들면 프로그램의 구조를 이해하고 관리하기 쉬워진다. ✨ 객체지향의 핵심 객체지향에서는 단순히 객체를 많이 만드는 것이 중요한 것이 아니다. 각 객체에게 적절한 역할과 책임을 부여하고, 객체들이 서로 협력하도록 설계하는 것 이 중요하다. 레고에 비유하면 다음과 같이 생각할 수 있다. 레고 블록 하나 → 객체 블록이 담당하는 역할 → 책임 여러 블록이 연결됨 → 객체 간 협력 완성된 구조물 → 프로그램 하나의 객체가 모든 일을 처리하는 것이 아니라 각 객체가 자신의 역할을 수행하고 서로 협력하면서 하나의 프로그램을 구성하는 것 이 객체지향의 핵심이다. 3. 클래스와 객체의 관계 객체지향을 공부하면서 가장 많이 헷갈리는 부분 중 하나가 클래스와 객체의 관계 다. 쉽게 이해하기 위해 흔히 붕어빵 틀과 붕어빵 에 비유한다. 붕어빵 틀 ↓ 붕어빵 붕어빵 붕어빵 붕어빵 틀 하나를 이용해 여러 개의 붕어빵을 만들 수 있는 것처럼, 자바에서는 클래스를 이용해 여러 객체를 생성할 수 있다. 클래스 → 객체를 만들기 위한 설계도 또는 틀 객체 → 클래스를 바탕으로 실제로 생성된 것 예를 들어 Cat 이라는 클래스를 만들어 보자. class Cat { String name; void meow() { System.out.println("야옹"); } } 이제 Cat 클래스를 이용해 여러 객체를 생성할 수 있다. Cat cat1 = new Cat(); Cat cat2 = new Cat(); Cat cat3 = new Cat(); 모두 Cat 클래스를 이용해 만들어졌지만 cat1 , cat2 , cat3 은 서로 다른 객체 다. 4. 객체와 인스턴스는 어떻게 다를까? 클래스를 통해 객체를 생성하면 여기서 인스턴스(Instance) 라는 용어가 등장한다. Cat cat = new Cat(); 이 코드를 보면 new Cat() 을 통해 Cat 클래스의 객체가 생성된다. 이처럼 클래스를 이용해 객체를 생성하는 과정 을 인스턴스화(Instantiation) 라고 한다. 그리고 이렇게 생성된 객체를 Cat 클래스의 인스턴스 라고 표현한다. Cat ↓ 클래스 new Cat() ↓ Cat 클래스의 객체 생성 cat ↓ 생성된 객체를 참조하는 변수 여기서 중요한 것은 객체와 인스턴스가 완전히 다른 개념은 아니라는 것 이다. 보통 객체는 생성된 대상을 일반적으로 표현할 때 사용하고, 특정 클래스와의 관계를 강조할 때 인스턴스라는 표현을 사용한다. 예를 들어 다음과 같이 말할 수 있다. cat 은 객체다. cat 은 Cat 클래스의 인스턴스다. 둘 다 같은 대상을 가리키지만 두 번째 표현에서는 Cat 클래스와의 관계를 강조하고 있다. 5. 같은 클래스로 만든 객체는 서로 다르다 그렇다면 같은 클래스로 만든 객체는 모두 같은 것일까? 그렇지 않다. Cat cat1 = new Cat(); Cat cat2 = new Cat(); cat1 과 cat2 는 모두 Cat 클래스를 통해 만들어졌지만 서로 다른 객체 다. 또한 각각 자신만의 상태를 가질 수 있다. cat1.name = "나비"; cat2.name = "치즈"; 그러면 객체의 상태는 다음과 같이 달라진다. cat1 → name = "나비" cat2 → name = "치즈" 즉, 하나의 클래스를 바탕으로 여러 객체를 만들 수 있고, 각각의 객체는 서로 다른 상태를 가질 수 있다. 이것이 클래스와 객체의 관계를 이해할 때 중요한 부분이다. 6. 클래스는 무엇으로 구성될까? 클래스는 객체가 어떤 상태와 행동을 가질지 정의하는 역할 을 한다. 자바의 클래스 내부에는 다양한 구성 요소를 정의할 수 있는데, 대표적으로 다음과 같다. 클래스 ├─ 필드(Field) ├─ 메서드(Method) ├─ 생성자(Constructor) └─ 이너 클래스(Inner Class) 이 중 객체지향을 처음 공부할 때는 필드, 메서드, 생성자 의 역할을 먼저 이해하는 것이 중요하다. 6.1 필드(Field) 필드는 객체의 상태를 저장하는 변수 다. class Cat { String name; int age; } 여기서 name 과 age 가 필드다. 객체를 생성한 후 각각의 값을 지정할 수 있다. Cat cat = new Cat(); cat.name = "나비"; cat.age = 3; 객체마다 별도의 상태를 가질 수 있기 때문에 다음과 같이 서로 다른 값을 저장할 수도 있다. Cat cat1 = new Cat(); Cat cat2 = new Cat(); cat1.name = "나비"; cat2.name = "치즈"; 6.2 메서드(Method) 메서드는 객체가 수행할 수 있는 행동을 정의한다. class Cat { void meow() { System.out.println("야옹"); } } 여기서 meow() 가 메서드다. 객체를 생성한 후 메서드를 호출하면 해당 객체가 정의된 행동을 수행한다. Cat cat = new Cat(); cat.meow(); // 야옹 앞에서 살펴본 것처럼 객체의 특징을 자바로 표현하면 상태는 필드, 행동은 메서드 로 나타낼 수 있다. 6.3 생성자(Constructor) 생성자는 객체가 생성될 때 호출되는 특별한 구성 요소 다. 주로 객체가 생성될 때 필요한 초기값을 설정하는 데 사용한다. class Cat { String name; Cat(String name) { this.name = name; } } 이제 객체를 생성하면서 이름을 전달할 수 있다. Cat cat = new Cat("나비"); 객체가 생성될 때 생성자가 실행되고 name 이 "나비" 로 초기화된다. 생성자는 일반 메서드와 비슷해 보이지만 클래스와 같은 이름을 가지며 반환 타입을 작성하지 않는다 는 특징이 있다. 6.4 이너 클래스(Inner Class) 이너 클래스는 클래스 내부에 선언된 클래스 다. class Cat { class Toy { // ... } } 위 코드에서 Toy 처럼 다른 클래스 내부에 선언된 클래스를 이너 클래스라고 한다. 특정 클래스와 밀접하게 관련된 클래스를 내부에 함께 정의할 때 사용할 수 있다. 다만 객체지향을 처음 공부하는 단계에서는 이너 클래스보다는 클래스와 객체의 관계, 필드와 메서드, 생성자의 역할 을 먼저 이해하는 것이 중요하다. 7. 객체지향 개념 한눈에 정리 지금까지 배운 내용을 하나로 연결하면 다음과 같다. 클래스 객체를 만들기 위한 설계도 │ ┌─────────┴─────────┐ ↓ ↓ 객체 1 객체 2 (인스턴스) (인스턴스) │ │ ┌────┴────┐ ┌────┴────┐ ↓ ↓ ↓ ↓ 필드 메서드 필드 메서드 (상태) (행동) (상태) (행동) 표로 정리하면 다음과 같다. 개념 의미 객체 상태와 행동을 가지는 독립적인 단위 클래스 객체를 만들기 위한 설계도 또는 틀 인스턴스 특정 클래스를 통해 생성된 객체 필드 객체의 상태를 표현하는 변수 메서드 객체의 행동을 정의하는 코드 생성자 객체가 생성될 때 초기화 작업을 수행하는 구성 요소 객체지향 프로그래밍 객체들이 서로 협력하도록 프로그램을 설계하는 방식 정리하면, 클래스 는 객체를 만들기 위한 설계도이고, 이 클래스를 통해 실제 객체(인스턴스) 를 생성한다. 객체는 필드로 상태를 가지고, 메서드로 행동을 수행하며, 생성자를 통해 객체가 생성될 때 필요한 초기화 작업을 수행한다. 마무리 처음 객체지향을 공부하면 객체, 클래스, 인스턴스처럼 비슷해 보이는 용어가 많아서 헷갈리기 쉽다. 하지만 각각의 관계를 연결해서 생각하면 조금 더 쉽게 이해할 수 있다. 클래스 → 객체를 만들기 위한 설계도 객체 → 상태와 행동을 가진 독립적인 단위 인스턴스 → 특정 클래스를 통해 생성된 객체 필드 → 객체의 상태를 표현 메서드 → 객체의 행동을 정의 생성자 → 객체 생성 시 초기화 작업 수행 객체지향 프로그래밍 → 객체들이 서로 협력하도록 프로그램을 설계하는 방식 특히 객체지향을 단순히 현실 세계의 대상을 그대로 프로그래밍으로 옮기는 것이라고 생각하기보다는 프로그램에서 필요한 역할과 책임을 객체로 나누고 객체들이 서로 협력하도록 설계하는 것 이라고 이해하는 것이 중요하다. 앞으로 자바에서 클래스와 객체를 계속 다루게 될 텐데 이번에 정리한 내용을 기억해 두면 이후에 배우게 될 캡슐화, 상속, 다형성 같은 객체지향 개념을 이해하는 데도 도움이 될 것 같다😚
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[Java] 객체지향이란 무엇일까? 객체와 클래스부터 알아보기. 자바를 공부하다 보면 객체(Object), 클래스(Class), 인스턴스(Instance), 메서드(Method) 같은 용어를 자주 만나게 된다. 처음에는 비슷해 보이는 용어가 많아서 헷갈리지만, 각각의 관계를 연결해서 생각하면 조금씩 구분할 수 있다. 이번 글에서는 객체지향이 무엇인지 부터 시작해서 객체와 클래스의 관계, 인스턴스, 클래스의 구성 요소 까지 정리해 보려고 한다. 1. 객체지향이란? 먼저 객체(Object) 가 무엇인지 알아보자. 프로그래밍에서는 프로그램에서 표현하고자 하는 대상을 객체 로 표현할 수 있다. 예를 들어 사람, 자동차, 강아지, 책과 같은 실제 존재뿐만 아니라 주문, 계좌, 날짜처럼 눈에 보이지 않는 개념도…
Open source