Java의 클래스와 객체: 차이점, 용도 및 완전한 프로그래밍 예제

마지막 업데이트 : 27/05/2025
저자 : 이삭
  • 클래스와 객체의 근본적인 구별은 다음과 같습니다. 프로그래밍 Java에서의 객체 지향
  • 클래스는 논리적 템플릿이고 객체는 메모리 내의 구체적인 인스턴스입니다.
  • 객체를 생성, 초기화, 조작하면 견고하고 재사용 가능한 프로그램을 구성할 수 있습니다.
  • Java의 예제와 모범 사례는 이러한 개념을 명확하고 적용 가능한 방식으로 통합합니다.

Java의 클래스와 객체

프로그래밍의 세계, 특히 우리가 프로그래밍에 대해 이야기한다면 자바, 근본적으로 다음의 차이점에 기초합니다. 클래스 y 사물. 늘 똑같은 이야기처럼 들릴지도 모릅니다. 한쪽은 이론이고, 다른 한쪽은 실천입니다. 하지만, 두 가지를 구별하는 방법을 알고 자연스럽게 적용하세요 이는 혼란스러운 코드와 견고하고 우아하며 유지 관리가 쉬운 코드의 차이를 만듭니다. 이 이항식을 이해하는 것은 시험이나 면접 질문을 훨씬 뛰어넘습니다. 이는 모든 Java 개발자의 일상 생활의 일부이며 유명한 객체 지향 프로그래밍(OOP)의 기초입니다..

이 기사에서는 명확하고 예를 들어 자세히 설명합니다. 클래스, 정확히 그게 뭐야? 사물, 그들이 어떻게 관련되어 있는지, 장점들 그리고 이 패러다임의 가능한 단점과 무엇보다도 이 모든 지식을 Java 세계에서 실제로 적용하는 방법에 대해 알아보겠습니다. 빠른 답변이나 간단한 차이점 목록을 찾고 있든, 여기에서 훨씬 더 많은 내용을 찾을 수 있습니다. 프로그래밍을 막 시작한 사람이든, 접근 방식을 개선하고자 하는 베테랑이든, 실용적인 개요를 통해 실제적인 뉘앙스를 담아 유용한 정보를 제공합니다.

객체 지향 프로그래밍이란 무엇이고 Java에서 왜 중요한가요?

언어의 중심 기둥은 다음과 같습니다. 자바객체 지향 프로그래밍(OOP). 이 패러다임은 코드 작성을 넘어 모듈식 조각으로 프로그램을 구축하는 것입니다. 사물데이터(속성, 특성)와 동작(메서드, 함수)을 모두 그룹화합니다. 수업 해당 객체가 어떤 모습일지 정의하고 사물 이는 프로그램의 메모리에서 살아있고 작동하는 구체적인 사례입니다.

그리고 그것이 왜 그렇게 중요할까요? 이런 방식으로 소프트웨어를 구성하면 더 크고 이해하기 쉽고 유지 관리가 훨씬 쉬운 애플리케이션을 구축할 수 있습니다. 모든 것이 제자리에 있고, 변경 사항이 있어도 모든 것을 처음부터 다시 할 필요가 없으며, 재사용이 예외가 아닌 표준이 되었습니다. 자바, C++와 함께, Python 그리고 C#은 이러한 원칙을 기반으로 하며 모든 설계 및 진화는 이를 기반으로 합니다. .

Java의 클래스: 객체를 만드는 방법

자바 세계에서는 수업 그것은 일종의 건축 지침이나 설계도에 불과합니다. 객체 집합의 모습을 정의합니다. 즉, 객체의 속성(가지고 있는 것)과 메서드(할 수 있는 것)를 설명합니다. 그것은 "실제 물건"이 아니다; 그것은 단지 그것이 어떻게 되어야 하는지에 대한 설명일 뿐입니다.

쿠키 공장을 상상해보세요. 제조법과 틀이 똑같습니다. 클래스; 나오는 쿠키는 각각 사물 콘크리트. 각각 맛, 색깔, 크기가 다르지만 모두 같은 초기 모델에서 나왔습니다.

정의할 때 클래스, 해당 개념을 특징짓는 속성(필드/변수)과 해당 데이터로 작업할 수 있는 방법을 작성합니다. 여기서 나중에 수천, 수백만 개의 다양한 객체에서 사용될 내용을 형성합니다.

Java의 초기 클래스 예제:

공개 클래스 Person { 개인 문자열 이름; 개인 정보 연령; // 공개 생성자 Person(String name, int age) { this.name = name; 이것.나이 = 나이; } // Public void greet() 메서드 { System.out.println("안녕하세요, 저는 " + name + "이고 " + age + "살입니다."); } }

이 경우, 수업 사람 곰팡이 역할을 합니다. 여기에는 두 개의 속성(이름과 나이), 객체를 초기화하는 생성자, 인사말을 출력하는 메서드가 있습니다. 하지만 이 "템플릿"은 아직 그 자체로 메모리를 차지하지 않으며, 프로그램에서도 아무런 작업을 수행하지 않습니다. 그것은 단지 정의일 뿐입니다.

  단일 시트에 바닥글을 추가하는 방법

Java의 객체: 실제 인스턴스와 점유된 메모리

클래스가 레시피라면, 대상 오븐에서 나오는 모든 쿠키입니다. Java에서 클래스의 객체를 만들 때 메모리를 할당하고 해당 객체의 특정 속성을 초기화합니다. 각 객체는 고유한 값을 가지며, 다른 객체의 값과 독립적입니다. 하지만 모두 동일한 "템플릿"을 공유합니다.

Java에서 객체를 생성하고 사용하는 작업은 일반적으로 키워드를 사용하여 수행됩니다. new:

사람 person1 = new Person("Ana", 28); 사람 person2 = new Person("Juan", 34);

매번 실행될 때마다 new Persona(...) 메모리가 할당되고, 데이터가 초기화되고, 고유한 객체가 얻어집니다. 이제 수정하면 persona1.edad, 그것은 전혀 영향을 미치지 않을 것입니다 persona2.

목적 객체는 값을 가질 뿐만 아니라 메서드를 실행하고 다른 객체와 상호 작용할 수 있으며, 객체의 물리적, 논리적 존재는 프로그램이 실제로 작동하는 데 중요합니다. 이제 모든 개인, 공개 또는 보호된 속성과 메서드가 해당 객체에서 사용될 준비가 되었습니다.

클래스와 객체의 주요 차이점

이는 영원한 의심 중 하나이며, 혼란을 피하기 위해 본질적인 차이점을 강조할 수 있습니다.

  • 수업 : 그것은 계획이고, 이론이고, 설명입니다. 그것은 단 한 번만 존재합니다. 동적으로 메모리를 차지하지 않습니다.
  • 목적: 그것은 기억 속에 사는 구체적 사례이자 물리적인 것입니다. (메모리가 허락한다면) 단일 클래스에서 무한한 객체가 생길 수 있습니다.
  • 수업 : 속성과 메서드를 정의하지만, 구체적인 값을 할당하지는 않습니다.
  • 목적: 자체 값을 가지고 있으며 클래스에 정의된 메서드를 실행할 수 있습니다.
  • 수업 : 직접적으로 조작할 수 없으며(상태를 변경할 수 없음), 기반 역할만 합니다.
  • 목적: 프로그램 전체에서 수정, 업데이트, 사용 및 조작이 가능합니다.

또 다른 중요한 차이점 메모리 할당 시간입니다. 클래스는 정의에 따라 메모리를 한 번만 차지하지만 각 객체는 특정 메모리 영역을 차지합니다. 이를 통해 각 객체는 독립적인 수명과 고유한 데이터를 가질 수 있습니다.

Java 클래스의 주요 구성 요소

라스 클래스 Java에서는 필요에 따라 간단하거나 복잡할 수 있지만 항상 다음과 같은 기본 구성 요소를 갖습니다.

  • 속성(필드/속성): 객체의 특성을 설명하는 변수(예: 이름, 나이, 색상, 크기).
  • 행동 양식: 속성을 조작하거나 작업을 실행할 수 있는 함수(예: wave, start, accelerate)
  • 건설업자: 객체(인스턴스)가 생성될 때 시작되는 특수 메서드로, 속성을 초기화하고 객체를 사용 전에 준비할 수 있습니다.
  • 접근 수정자: 다음과 같은 단어 공공, 사적, 보호 속성/메서드의 가시성과 액세스를 제어합니다.
  • 상속과 다형성: 클래스는 다른 클래스(부모/자식)로부터 상속을 받고 해당 클래스의 동작을 확장하거나 수정할 수 있습니다. 이로 인해 추상 클래스, 인터페이스 등이 생겨납니다.

예를 들어, 우리가 클래스를 디자인한다면 자동차 비디오 게임의 경우 속성은 모델, 최대 속도, 색상 등이 될 수 있으며 방법은 다음과 같습니다. acelerar(), frenar() o encender().

관련 기사 :
Lifa 소프트웨어란 무엇입니까?

Java에서 객체를 생성하고 사용하는 방법: 실제 예제

연습이 전부입니다. Java에서 OOP에 관해 볼 수 있는 거의 모든 자료는 사람, 자동차, 동물, 회사와 같은 예를 사용합니다. 이는 코드에서 논리적 구조로 쉽게 변환할 수 있기 때문입니다.

  부팅 후 종료되는 모니터 수정

간단한 예: 사람을 만들고 해당 정보를 표시합니다.

공개 클래스 Person { 개인 문자열 이름; 개인 정보 연령; public Person(문자열 이름, int 나이) { this.name = name; 이것.나이 = 나이; } public void showInformation() { System.out.println("이름: " + name); System.out.println("나이: " + age); } } public class Main { public static void main(String[] args) { Person person1 = new Person("Luis", 22); person1.정보 표시(); } }

생성자는 객체의 값을 초기화하고, 메서드는 정보를 표시할 수 있도록 하며, 객체는 persona1 해당 특정 데이터와 함께 메모리에 저장됩니다.

정적 속성 사용 예

공개 클래스 카운터 { 개인 정적 int count = 0; 공개 카운터() { count++; } public static int getAccount() { 계정을 반환합니다. } public static void main(String[] args) { 카운터 c1 = 새 카운터(); 카운터 c2 = 새로운 카운터(); System.out.println("생성된 총 객체: " + Counter.getCount()); } }

변수 cuenta 이는 클래스의 모든 객체에서 공유되며 전체적으로 얼마나 많은 객체가 생성되었는지 알 수 있게 해줍니다. 이는 인스턴스 속성(각 객체에 고유한 속성)과 정적 속성(모든 객체에서 공유되는 속성)의 차이점을 보여줍니다.

Java의 속성: 유형 및 용도

속성 이는 각 객체의 데이터 또는 특성입니다. 이들은 클래스 내부에 배치되지만 메서드 외부에 배치되며 다양한 수정자를 가질 수 있습니다.

  • 인스턴스 속성: 이러한 속성은 각 객체에 따라 다르며, 각 객체는 고유한 사본과 고유한 상태를 갖습니다.
  • 정적 속성: 모든 인스턴스에서 공유됨. 한 객체에서 설정을 변경하면 모든 객체에 영향을 미칩니다.
  • 최종 속성: 초기화되면 값을 변경할 수 없습니다.
  • 클래스 속성: Java에서는 일반적으로 정적 속성과 동일합니다.

public, private 또는 protected 중에서 선택하는 것은 클래스 외부에서 액세스를 제어할지 여부에 따라 달라집니다(모범 사례: 더 큰 제어와 캡슐화를 위해 private 및 getter/setter 메서드를 사용하세요). 더 깊이 들어가고 싶다면 Power BI에서 보고서를 사용자 지정하는 방법, 데이터 관리와 시각화에 대한 지식도 확장할 수 있습니다.

생성자: 객체의 상태를 초기화합니다.

Java에서는 객체를 생성할 때마다 프로세스가 실행됩니다. 건설자이는 클래스 이름과 이름이 일치하고 반환 유형이 없는 특수한 메서드입니다. 속성에 대한 초기값을 설정하거나 시작 로직을 실행하는 데 사용됩니다.

필요에 따라 오버로드할 수 있는 다양한 유형의 생성자가 있습니다.

  • 기본 생성자: 매개변수를 받지 않습니다. 아무것도 정의하지 않으면 Java가 자동으로 빈 인스턴스를 생성합니다.
  • 매개변수가 있는 생성자: 속성에 대한 초기값을 받습니다.
  • 복사 생성자: 다른 객체로부터 새로운 객체를 만들고 해당 객체의 값을 복사할 수 있습니다.
  • 개인 건설업체: 이는 종종 Singleton과 같은 패턴에서 사용되어 객체를 외부에서 직접 생성할 수 없게 합니다.

Java의 상속, 슈퍼클래스 및 서브클래스

OOP와 Java의 가장 강력한 개념 중 하나는 다음과 같습니다. 헤렌 치아: 다른 클래스로부터 새로운 클래스를 만들고 해당 클래스의 속성과 메서드를 상속할 수 있는 가능성. 이를 통해 논리적 계층을 구축하고 코드 중복을 피할 수 있습니다.

La 슈퍼클래스 클래스가 상속받는 기본 클래스(부모 클래스)입니다. 하위 클래스 (딸들). 하위 클래스는 상속된 동작을 확장하거나 수정할 수 있으며, 새로운 메서드나 속성을 추가할 수도 있습니다.

  감정을 제어하는 ​​8가지 최고의 앱

예 :

공개 클래스 Animal { 보호된 문자열 이름; public void makeSound() { System.out.println("일반 사운드"); } } public class Dog extends Animal { public void makeSound() { System.out.println("멍멍"); } }

객체 지향 프로그래밍의 장단점

La (특히 Java)에는 수많은 장점이 있으며, 이것이 이 패러다임이 전문 개발에서 지배적인 이유를 설명합니다.

  • 코드 재사용을 허용합니다. 상속과 모듈형 구성 덕분에 기존 작업을 활용하고 새로운 맥락에 맞게 조정할 수 있습니다.
  • 프로그램을 모듈로 나누세요: 각 클래스는 독립적인 "부분"이므로 대규모 프로그램을 관리하기가 더 쉽습니다.
  • 유지보수 용이: 한 클래스를 수정해도 다른 클래스에 영향을 미치지 않으므로 변경 사항은 지역화되고 안전합니다.
  • 명확성과 문서화를 촉진합니다. 클래스와 객체는 현실 세계의 개념을 반영하여 문제 영역을 이해하는 데 도움이 됩니다.

하지만 몇 가지 단점이나 과제도 있습니다.

  • 더 높은 메모리 소비: 여러 객체를 생성하면 각 객체는 고유한 메모리를 차지합니다.
  • 초기 학습 곡선: 처음에는 클래스, 객체, 상속, 다형성 등의 관계를 이해하는 것이 혼란스러울 수 있습니다.
  • 효율성 손실 가능성: 프로그램은 더 "평평한" 모델(구조적 프로그래밍 등)보다 다소 느리게 실행될 수 있습니다.

Java에서 적용된 클래스와 객체의 완전한 예

이제 지금까지 배운 모든 내용을 포괄하고 클래스, 객체, 속성, 생성자, 메서드 간의 관계를 보여주는 예를 살펴보겠습니다.

// 클래스를 정의합니다 public class Animal { private String name; 개인 정보 연령; 공개 동물(문자열 이름) { this.name = name; 이 나이 = 0; } public int getAge() { 나이를 반환합니다. } public void setAge(int newAge) { this.age = newAge; } public String getName() { 이름을 반환합니다. } } // 클래스 사용 public class Example { public static void main(String[] args) { Animal myAnimal = new Animal("Falco"); myAnimal.setAge(3); System.out.println("이름은 " + getName() + "이고, " + getAge() + "세입니다."); } }

메모리와 참조가 Java에 미치는 영향

Java에서 객체를 생성할 때 실제로 프로그램 변수에 포함되는 것은 다음과 같습니다. 참고 문헌 해당 객체가 차지하는 메모리 공간. 따라서 객체가 다른 변수에 할당되면 둘 다 같은 인스턴스를 가리킵니다.

예 :

사람 personA = new Person("마리오", 45); 사람 personB = personA; personB.setAge(46); System.out.println(personA.getAge()); // 46번 인쇄

이것은 둘 다 때문에 발생합니다. personaA 으로 personaB 메모리 속의 동일한 객체를 가리킨다. 독립 실행형 사본을 만들려면 .을 사용하는 것이 좋습니다.

모범 사례: 캡슐화 및 접근자 메서드

Java에서 가장 중요한 권장 사항 중 하나는 다음과 같습니다. 속성을 보호하다 그들을 만들기 사설, 그리고 공개 메서드를 통해서만 액세스 또는 수정을 허용합니다. 게터와 세터. 이는 객체의 내부 상태를 보호합니다. 추가 제어 또는 검증이 가능합니다. 필요한 경우.

예를 들면 다음과 같습니다

공개 클래스 Person { 개인 문자열 이름; 개인 정보 연령; 공개 문자열 getName() { 이름을 반환합니다. } public void setName(문자열 이름) { this.name = 이름; } }