Java에서 클래스, 객체 및 인스턴스는 무엇입니까?
답변:
Java (및 기타 프로그래밍 언어)는 유형 및 값 측면에서 모델링 됩니다 . 이론적 수준에서 값 은 정보의 일부 양자에 대한 표현이고 유형 은 값의 집합입니다. 값 X 가 Y 유형 의 인스턴스 라고 말할 때 , 우리는 X가 Y 유형 인 값 세트의 구성원이라는 것을 의미합니다.
이것이 "인스턴스"라는 용어가 실제로 의미하는 것입니다. 그것은 사물이 아닌 관계를 설명합니다.
Java 프로그래밍 언어의 유형 시스템은 기본 유형 과 참조 유형 의 두 가지 유형을 지원합니다 . 참조 유형은 클래스 와 배열 유형 으로 더 나뉩니다 . Java 객체 는 참조 유형의 인스턴스입니다.
객체는 클래스 인스턴스 또는 배열입니다. ( JLS 4.3.1 )
그것이 유형 이론적 관점입니다.
실제로 대부분의 Java 개발자는 "인스턴스"와 "객체"라는 단어를 동의어로 취급합니다. (그리고 여기에 저도 포함됩니다. 저는 무언가를 빨리 설명하려고합니다.) 그리고 대부분의 개발자는 원시 유형의 인스턴스를 참조하기 위해 "인스턴스"보다는 "가치"라는 단어를 사용합니다.
user2390183
있습니다. 변수를 "이름"으로 취급합니다. 그렇지 않습니다. 변수는 개체에 대한 참조를 포함하는 "참조 홀더"입니다. 개체에는 고유 이름이 없습니다. 참조는 상수 표현이 없다는 점을 제외하고는 객체의 "이름"에 가장 가까운 것입니다. 합니다 (GC는 참조를 나타 내기 위해 사용되는 비트 패턴을 변경하는 오브젝트를 이동할 수있다.)
클래스를 생성하는 데 사용하는 청사진 객체 . 객체는 클래스 의 인스턴스 입니다. 특정 클래스를 사용하여 만든 구체적인 '사물'입니다. 따라서 '객체'와 '인스턴스'는 동일하지만 '인스턴스'라는 단어는 객체와 클래스의 관계를 나타냅니다.
예를 보면 이해하기 쉽습니다. 예를 들어 클래스가 있다고 가정합니다 House
. 자신의 집은 객체이며 클래스의 인스턴스입니다 House
. 여동생의 집은 또 다른 객체입니다 (class의 또 다른 인스턴스 House
).
// Class House describes what a house is
class House {
// ...
}
// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();
이 클래스 House
는 집이 무엇인지에 대한 개념을 설명하고 클래스의 객체이자 인스턴스 인 구체적인 구체적인 집이 있습니다 House
.
참고 : 이는 모든 객체 지향 프로그래밍 언어에서와 마찬가지로 Java에서도 정확히 동일합니다.
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = House new();
Car myCar = Car new();
클래스는 기본적으로 정의이며 객체의 코드를 포함합니다. 객체는 클래스의 인스턴스입니다.
예를 들어
String word = new String();
클래스는 객체 (인스턴스) 단어를 설명하는 String 클래스입니다.
클래스가 선언되면 메모리가 할당되지 않으므로 클래스는 템플릿 일뿐입니다.
클래스의 객체가 선언되면 메모리가 할당됩니다.
static
클래스 의 변수를 나타내는 데 할당됩니다 . (. 그리고 클래스의 유형 정체성에 관련된 너무 다른 것들에 대한)
나는 평신도 용어로 Jesper의 설명을 좋아합니다
Jesper의 답변에서 예를 즉석에서
class House {
// blue print for House Objects
}
class Car {
// blue print for Instances of Class Car
}
House myHouse = new House();
Car myCar = new Car();
myHouse와 myCar는 객체입니다.
myHouse는 House의 인스턴스입니다 (Object-myHouse와 Class-House와 관련됨) myCar는 Car의 인스턴스입니다.
간단히 말해서
"myHouse는 Class House 의 인스턴스 입니다. "라는 말은 "myHouse는 House 유형 의 객체 입니다 "라고 말하는 것과 같습니다.
클래스는 데이터 유형입니다.이 유형을 사용하여 개체를 만듭니다.
인스턴스는 논리적이지만 객체는 물리적 인 것은 일부 메모리를 차지함을 의미합니다.
우리는 인터페이스뿐만 아니라 추상 클래스에 대한 인스턴스를 만들 수 있지만이를위한
객체를 만들 수는 없습니다 .
객체는 클래스의 인스턴스이고 인스턴스는 클래스 즉 객체를 대표하는 것을 의미합니다.
인스턴스는 개체의 참조를 나타냅니다.
개체는 실제로 해당 인스턴스의 메모리 주소를 가리 킵니다.
인스턴스를 레이어 위로 전달할 수는 없지만 개체를 레이어 위로 전달할 수는 있습니다.
인스턴스는 저장할 수 없지만 객체는 저장할 수 있습니다.
단일 개체는 둘 이상의 인스턴스를 가질 수 있습니다.
인스턴스에는 클래스 정의와 객체 정의가 모두 있으며 객체에서와 같이 객체 정의 만 있습니다.
개체 구문 :
Classname var=new Classname();
그러나 인스턴스 생성의 경우 객체를 참조하는 포인터 만 반환합니다. 구문은 다음과 같습니다.
Classname varname;
솔직히 저는 Alfred 블로그 정의가 더 편합니다 .
개체 : 실제 개체는 두 가지 주요 특성, 상태 및 동작을 공유합니다. 인간은 상태 (이름, 나이)와 행동 (달리기, 수면)이 있습니다. 자동차에는 상태 (현재 속도, 현재 기어) 및 동작 (브레이크 적용, 기어 변경)이 있습니다. 소프트웨어 객체는 개념적으로 실제 객체와 유사합니다. 또한 상태 및 관련 동작으로 구성됩니다. 개체는 상태를 필드에 저장하고 메서드를 통해 동작을 노출합니다.
클래스 : 개체를 만드는 데 사용되는 "템플릿"/ "청사진"입니다. 기본적으로 클래스는 필드, 정적 필드, 메서드, 정적 메서드 및 생성자로 구성됩니다. 필드는 클래스의 상태를 저장하는 데 사용됩니다 (예 : 학생 개체의 이름). 메서드는 클래스의 동작을 나타내는 데 사용됩니다 (예 : Student 개체가 일어서는 방법). 생성자는 클래스의 새 인스턴스를 만드는 데 사용됩니다.
인스턴스 : 인스턴스는 객체를 나타내는 클래스의 고유 한 복사본입니다. 클래스의 새 인스턴스가 생성되면 JVM은 해당 클래스 인스턴스에 대한 메모리 공간을 할당합니다.
다음 예가 주어지면 :
public class Person {
private int id;
private String name;
private int age;
public Person (int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id != other.id)
return false;
return true;
}
public static void main(String[] args) {
//case 1
Person p1 = new Person(1, "Carlos", 20);
Person p2 = new Person(1, "Carlos", 20);
//case 2
Person p3 = new Person(2, "John", 15);
Person p4 = new Person(3, "Mary", 17);
}
}
사례 1의 경우 Person 클래스의 두 인스턴스가 있지만 두 인스턴스는 모두 동일한 객체를 나타냅니다.
경우 2의 경우 Person 클래스의 인스턴스가 두 개 있지만 각 인스턴스는 다른 개체를 나타냅니다.
따라서 클래스, 객체 및 인스턴스는 다른 것입니다. 정답으로 선택한 답변에서 제안 된 객체와 인스턴스는 동의어가 아닙니다.
자동차를 모델링하는 프로그램이 있다면 자동차를 나타내는 클래스가 있으므로 코드에서 다음과 같이 말할 수 있습니다.
Car someCar = new Car();
someCar는 이제 Car 클래스의 인스턴스입니다. 프로그램이 수리점에서 사용되고 someCar가 시스템에서 귀하의 자동차를 나타내는 경우 귀하의 자동차가 대상입니다.
따라서 Car는 실제 자동차를 나타낼 수있는 클래스입니다. someCar는 Car 클래스의 인스턴스이고 someCare는 하나의 실제 개체 (사용자의 자동차)를 나타냅니다.
그러나 인스턴스와 객체는 코딩을 논의 할 때 매우 자주 사용됩니다.
someCar
Car 인스턴스에 대한 참조입니다. 인스턴스 자체에는 이름이 없습니다.
컴퓨터가 저장하고 처리하는 모든 종류의 데이터는 가장 기본적인 형태의 비트 행입니다. 이러한 비트가 해석되는 방식은 데이터 유형을 통해 수행됩니다. 데이터 유형은 원시적이거나 복잡 할 수 있습니다. 기본 데이터 유형은-예를 들어-int 또는 double입니다. 그것들은 특정한 길이와 특정한 해석 방법을 가지고 있습니다. 정수의 경우 일반적으로 첫 번째 비트가 부호에 사용되고 나머지 비트는 값에 사용됩니다.
복합 데이터 유형은 기본 및 기타 복합 데이터 유형의 조합 일 수 있으며 Java에서는 "클래스"라고합니다.
성과 이름이라는 두 개의 문자열로 구성된 복잡한 데이터 유형 PeopleName을 정의 할 수 있습니다. Java의 각 문자열은 또 다른 복잡한 데이터 유형입니다. 반환되는 문자열은 (아마도) Java가 저장하는 데 필요한 비트 수와 해석 방법을 알고있는 원시 데이터 유형 char을 사용하여 구현됩니다.
데이터 유형의 인스턴스를 생성하면 객체가 생성되고 컴퓨터는이를 위해 일부 메모리를 예약하고 해당 위치와 해당 인스턴스의 이름을 기억합니다. 메모리에있는 PeopleName의 인스턴스는 두 개의 String 변수의 공간과 부기 관리를 위해 조금 더 많은 공간을 차지합니다. 정수는 Java에서 32 비트를 차지합니다.
복잡한 데이터 유형에는 메소드가 할당 될 수 있습니다. 메서드는 해당 인수 또는이 메서드를 호출하는 데이터 형식의 인스턴스에 대해 작업을 수행 할 수 있습니다. p1과 p2라는 두 개의 PeopleName 인스턴스가 있고 p1.getFirstName () 메서드를 호출하면 일반적으로 첫 번째 사람의 이름을 반환하지만 두 번째 사람의 이름은 반환하지 않습니다.
클래스와 개체의 개념은 논리를 단일 프로그래밍 단위로 캡슐화하는 것입니다. 클래스 는 객체가 생성되는 청사진입니다.
다음은 Car를 나타내는 클래스의 예입니다.
public class Car {
int currentSpeed;
String name;
public void accelerate() {
}
public void park() {
}
public void printCurrentSpeed() {
}
}
다음 과 같이 Car 개체의 인스턴스 를 만들 수 있습니다 .
Car audi = new Car();
Car toyota = new Car();
이 튜토리얼 에서 예제를 가져 왔습니다.
논리적으로 존재합니다. 즉, 생성 될 때 메모리 공간이 할당되지 않습니다.
일련의 개체입니다.
클래스는 객체를 생성하는 청사진으로 간주 될 수 있습니다.
class 키워드를 사용하여 생성됩니다.
클래스는 객체가 소유 할 메서드와 데이터 멤버를 정의합니다.
물리적 인 존재가 있습니다. 즉, 생성 될 때 메모리 공간이 할당됩니다.
클래스의 인스턴스입니다.
객체는 OOP 언어로 함께 데이터 멤버와 멤버 함수를 포함하는 고유 한 엔티티입니다.
새 키워드를 사용하여 생성됩니다.
객체는 클래스의 데이터 멤버가 소유 할 메서드와 값의 구현을 지정합니다.
"Object is an instance of a class"정의는 개념적으로 잘못되었지만 구현에 따라 정확합니다. 실제로 객체 지향 기능은 프로그래머의 마음을 더 많이 집중하기 위해 실제 생활에서 가져 왔습니다. 실생활에서 수업은 대상을 관리하도록 설계되었습니다. 예를 들어 인간은 카스트, 종교, 국적 등을 가지고 있습니다. 이 캐스트, 종교, 국적은 계급이며 인간 없이는 존재하지 않습니다. 그러나 구현에서 클래스가없는 객체는 존재하지 않습니다. Object- Object는 잘 정의 된 속성을 가진 개별 엔티티입니다. 여기서 이산이란 다른 것에서 독특하게 만드는 것을 의미합니다. 잘 정의 된 속성은 어떤 상황에서는 의미가 있습니다. 클래스-일부 공통 동작 또는 일부 공통 유형의 객체를 갖는 객체의 분류.