클래스와 유형의 차이점


105

Java를 처음 접하기 때문에 classtype 의 개념이 혼동 됩니다. 예를 들어, 객체 "Hello World!"유형 String 또는 클래스에 속해야 String합니까? 아니면 둘 다?


24
최근에는 "초보자"스타일 질문이 좋은지 아닌지에 대해 반대표를 던지는 경향이있는 것 같습니다. 적어도 말하면 성가시다.
nico_c 2013 년

9
또한 유권자가 이해하지 못하는 질문에 대해 반대표를 던집니다.
Marquis of Lorne

4
초심자 질문에 반대표를 던지는 것이 무례하다는 데 동의하지만, 좋은지 나쁜지 여부에 관계없이 모든 초보자 질문은 웹 검색만으로 답을 얻을 수 있습니다. 문제와 사람들이 반대 투표를하는 이유는 이것이 스택 오버플로로 이어지기 때문입니다. :)
Marko Lazić

13
이것은 좋은 질문입니다. 그리고 3 개의 투표를 닫아야 우리가 열린 상태유지 하기 위해 투표 할 수 있어야합니다 . Java를 배우고있을 때 OO 전문 용어가 가장 큰 장애물이라는 것을 기억합니다.
Lawrence Dol 2013 년

4
@nickecarlo 예전에 FAQ에 한 가지 요점이 있었는데, 작년 정도에 언급 된 것처럼 보였습니다. "이 질문은 심각한 연구 부족을 보여주고 질문을하기 전에 문제를 해결하기 위해 노력한 흔적을 보여주지 않습니다. ". 여기 사람들이 실제로 다른 사람들에게 "프로그래밍 101"을 설명하는 데 시간을 낭비하는 대신 Google이 해결할 수있는 헛소리 질문이 너무 많아서 짜증이납니다.
TC1 2013 년

답변:


123

클래스는 유형입니다. 인터페이스는 유형입니다. 프리미티브는 유형입니다. 배열은 유형입니다.

따라서 모든 유형은 클래스 (열거 형 상수 포함), 인터페이스, 프리미티브 또는 배열이기도합니다.

유형에는 기본 유형과 참조 유형의 두 가지 유형이 있습니다.

  • 기본 유형의 변수는 항상 동일한 유형의 기본 값을 보유합니다. 이러한 값은 해당 변수에 대한 할당 작업을 통해서만 변경할 수 있습니다.
  • 참조 유형의 변수는 항상 객체에 대한 참조 값을 보유합니다. 배열을 포함한 모든 객체는 class의 메소드를 지원합니다 Object. 참조 유형은 클래스 유형 (열거 형 유형 포함), 인터페이스 유형 및 배열 유형입니다.

모든 데이터에는 구조를 정의하는 유형이 있습니다. 즉, 차지하는 메모리 양, 배치 방법, 더 중요한 것은 데이터와 상호 작용할 수있는 방법입니다.

기본 유형의 예 :

  1. int
  2. float
  3. char
  4. boolean

클래스 유형의 예 :

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

인터페이스 유형의 예 :

  1. Collection
  2. List
  3. Map
  4. Serializable

배열 유형의 예 :

  1. int[]
  2. String[]
  3. Integer[][][]

기본적으로 변수로 참조 할 수있는 모든 것에는 유형이 있으며 클래스는 일종의 유형입니다.

자세한 정보 : http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html


6
배열을 잊지 마십시오.
Paul Bellora 2013 년

1
작성하려는 의도가 확실하지 않기 때문에 직접 편집하지는 않겠습니다.하지만 클래스가 "유형의 유형"이 아닌 "일종의 유형"이라고 말하는 것이 더 효과적 일 수 있습니다 .
CVn

@ MichaelKjörling 네, 더 좋은 말입니다. 업데이트하겠습니다.
Brandon

3
널 유형을 잊어 버렸습니다 (JLS 4.1 참조).
user1803551 2014 년

1
@AndyDong 추상 클래스는 여전히 클래스입니다.
Brandon

6

TLDR- 클래스는 Java의 유형 중 하나입니다.

주-답을 완전히 이해하려면 Java의 제네릭에 대한 약간의 아이디어가 있어야합니다.


차이점을 이해하기 위해 먼저 Java에서 유형 이 무엇인지 이해합시다 .

JLS SE 10 에 따르면 ,

Java 프로그래밍 언어에는 기본 유형 ( §4.2 )과 참조 유형 ( §4.3 ) 의 두 가지 유형이 있습니다 .

원시 유형이란 무엇입니까?

a) 정수 유형은 byte, short, int 및 long 이며 값은 각각 8 비트, 16 비트, 32 비트 및 64 비트 부호있는 2의 보수 정수 이고 값이 16 비트 인 char UTF-16 코드 단위를 나타내는 부호없는 정수 (§3.1).

b) 부동 소수점 유형은 값이 32 비트 IEEE 754 부동 소수점 숫자를 포함하는 float 및 값이 64 비트 IEEE 754 부동 소수점 숫자를 포함하는 double 입니다.

c) 부울 유형에는 정확히 두 가지 값, 즉 true와 false가 있습니다.

이제 참조 유형이란 무엇입니까?

참조 유형에는 클래스 유형 ( §8.1 ), 인터페이스 유형 ( §9.1 ), 유형 변수 ( §4.4 ) 및 배열 유형 ( §10.1 )의 가지 종류가 있습니다 .

하나씩 논의합시다.

JLS에서 어떻게 보면 Class 는 다음과 같이 정의됩니다.

클래스 선언은 새로운 지정된 참조 유형을 지정합니다.

클래스 선언에는 일반 클래스 선언과 열거 형 선언 의 두 가지 종류가 있습니다 .

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

당신은 그 참조 [TypeParameters]클래스 형식도 그 일반적인 클래스를 포함,이 쇼를.

class Example<T>{

}

클래스 유형이 호출됩니다. Example

간단히 말해서, 클래스 유형은 열거 형, 일반 (일반이 아닌) 클래스, Stringetc와 같은 일반 클래스도 포함합니다.

마찬가지로 인터페이스 및 배열 유형도 명확하기를 바랍니다. 배열 형식으로 우리는 같은 의미 int[], String[]

마지막 부분 인 유형 변수에 대해 살펴 보겠습니다. 그들은 무엇인가 ?

형식 변수는 클래스, 인터페이스, 메서드 및 생성자 본문에서 형식으로 사용되는 규정되지 않은 식별자입니다.

아래 JLS의 예를 통해 이해합시다.

class Test {
    <T extends C & I> void test(T t) {  
        t.mI();           // OK
        t.mCPublic();     // OK 
        t.mCProtected();  // OK 
        t.mCPackage();    // OK

    } 
}

method 매개 변수의 개체가 유형임을 알 수 있습니다 T. 예, 이것은 T유형 변수이며 참조로 사용할 수 있습니다. 네, 그렇습니다. (이 이상한 예를 이해할 수 없습니다-Java의 일반 메소드가 무엇인지 알아보십시오)

이것으로 답이 완성되었습니다.


4

"유형"은 더 포괄적 인 범주입니다. Java의 변수는 세 가지 유형을 가질 수 있습니다. int 및 float, 인터페이스 및 클래스와 같은 8 개의 "기본"유형입니다. 값 (변수와 반대)은 기본 또는 클래스 인스턴스 일 수 있습니다.


2

"유형"은 '데이터 유형'을 정의합니다.

예 : "hello world"는 문자열입니다.-> "hello world"는 문자열 유형입니다.

10은 정수-> 10은 정수 데이터 유형입니다.


5
Java에서는 Integer! = int이므로 정수를 사용하여 int를 설명하는 데주의하십시오.
nico_c 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.