두 용어가 매우 혼란 스럽습니다. stackoverflow를 확인한 결과 C ++에는 비슷한 질문이 있지만 Java에는 해당되지 않습니다.
누군가 자바에 대한 두 용어의 차이점을 설명 할 수 있습니까?
답변
개념적 차이점은 간단합니다.
-
선언 : 클래스, 함수 또는 변수와 같은 것이 존재한다고 선언 합니다. 그 클래스 나 함수가 어떻게 생겼는지 에 대해 아무 말도하지 않고 단지 존재한다고 말하면됩니다.
-
정의 : 클래스, 함수 또는 변수와 같은 무언가가 구현되는 방식을 정의 합니다. 즉, 실제로 무엇인지 말합니다 .
Java에서는 둘 사이에 거의 차이가 없으며 공식적으로 선언에는 식별자뿐만 아니라 정의도 포함됩니다. 제가 개인적으로 용어를 자세히 해석하는 방법은 다음과 같습니다.
-
클래스 : 자바는 C / C ++처럼 (헤더와 cpp 파일에서) 선언과 정의를 분리하지 않습니다. 선언하는 지점에서 정의합니다.
-
함수 : 인터페이스 (또는 추상 클래스)를 작성할 때 정의하지 않고 함수를 선언한다고 말할 수 있습니다. 그러나 일반 함수는 항상 선언 된 위치에서 바로 정의됩니다. 원하는 경우 함수의 본문을 정의로 참조하십시오.
-
변수 : 변수 선언 은 다음과 같습니다.
int x;
(변수
x
가 존재하고 유형 이 있음을 선언합니다int
) 지역 변수 또는 멤버 필드 인 경우. 자바에 대해 남아있는 정보가 없다x
하는 정의 그것에 할당에 의해 결정됩니다 그것이 개최한다 어떤 값 수를 제외하고는.
용어를 사용하는 방법에 대한 대략적인 요약은 다음과 같습니다.
abstract class SomeClass { // class decl.
// \
int x; // variable decl. |
// |
public abstract void someMethod(); // function decl. |
// |
public int someOtherMethod() { // function decl. |
// | class
if (Math.random() > .5) // \ | def.
return x; // | function definition |
else // | |
return -x; // / |
// |
} // |
} // /
답변
Java 언어 사양은 “선언”이라는 용어를 광범위하게 지정하고 사용하지만 일반 영어 단어를 제외하고는 “정의”를 사용하지 않습니다.
내 증거는 “선언”이라는 용어가 JLS 목차와 색인에 여러 번 등장하지만 “정의”라는 단어는 어느 쪽에도 나타나지 않는다는 것입니다.
따라서 누군가가 Java의 맥락에서 “정의”라는 단어를 사용하는 것을 보면 비 기술적 인 의미로 사용하거나 용어를 엉성하게 사용하는 것입니다.
후자의 경우, 그들은 수있는 기술적 인 용어 “선언”과 같은 의미, 또는 다른 것을 의미 할 수 있습니다. 그리고 그들이 다른 것을 의미한다면, 그들이 무엇을 의미하는지 물어봐야합니다. 그들이 정의했다면 … 충분히 공평하지만 표준 용어는 아닙니다.
“정의”가 변수가 초기화되는 지점을 지칭한다는 답변은 특히 Java의 맥락에서 지원할 수 없습니다. Java에서 변수 초기화는 선언 시점 또는 이후 할당에서 발생합니다. 후자의 경우 할당 및 / 또는 초기화와 별도로 특별한 용어가 사용되지 않거나 필요하지 않습니다. 변수에 대해 스토리지가 할당되는 지정된 지점이 없습니다. 실제로 선언에 도달 하기 전에 변수 자체에 대한 공간이 할당 될 가능성이 있습니다.
JLS 스펙에서 Java에서 “정의”용어가 사용되지 않는 이유는 필요하지 않기 때문입니다.
- Java에서는 멤버를 순서에 관계없이 선언 할 수 있으므로 “앞으로 선언”할 필요가 없습니다. 그것이 두 개념을 구별 할 필요가있는 상황입니다.
- Java에서 변수에 필요한 스택 공간은 컴파일 시간 상수이므로 스택 오프셋 계산은 컴파일 시간에 발생합니다. (Java에서 배열은 힙 객체에 대한 참조이며 참조 만 스택 프레임에 유지됩니다.)
- Java가 필드 또는 변수의 “초기화없이 정의”를 처리하는 방식에는 단일 “선언”지점이 필요하지 않습니다. 변수 초기화가 필요한 경우 소스 코드의 여러 지점에서 발생할 수 있습니다.
(Java에서 선언 대 정의를 사용한 유일한 위치는 추상 메서드에 있습니다. 만약 그렇게했다면, 일관성을 위해 정규 메서드 선언을 정의로 참조해야했습니다 … 혼란 스러울 것입니다. 그래서 그들은 “abstract”subcase를 추상 메소드의 선언이라고 부릅니다.)
C와 C ++는 이러한 것들을 다르게 처리하므로 기술적 설명에 뚜렷한 “선언”및 “정의”용어 가 필요합니다. “Sun Glossary”정의에 대한 필자는 C / C ++ 중심적이라는 것입니다.
답변
로부터 일의 용어의 정의 :
선언 (declaration) :
저장소 (데이터 용)를 반드시 예약하거나 구현 (메소드 용)을 제공하지 않고 식별자를 설정하고 속성을 연관시키는 명령문.
정의 :
스토리지 (데이터 용)를 예약하거나 구현 (메소드 용)을 제공하는 선언.
내가 Sun 용어집을 읽는 방법은 다음과 같습니다.
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
답변
1. 선언 수단 생성 가 primitive or Object reference variable
있지만 , 각각의 값 또는 객체의 할당 없음으로 ..
예 :
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2. 정의는 값이나 객체를 할당하는 것입니다.
int x = 5;
Cat myCat = new Cat();
3. Method의 경우 다음과 같습니다.
public abstract void go(); // Method Declaration (Abstract method)
public void go(){ // Method Defination
// Your code
}
답변
이 질문을 다음과 같이 더 잘 설명 할 수 있다고 생각합니다.
다음 시나리오를 생각해보십시오.
회사에 소프트웨어 엔지니어의 새로운 공석이 있습니다. 즉,이 직위를 채우기 위해 선택한 사람이 소프트웨어 엔지니어가 될 것입니다 (이 게시물에 대한 마케팅 담당자를 선택할 수 없음). 따라서이 게시물을 만드는 것은 선언과 유사합니다.
이제이 게시물을 가진 사람이 할 수있는 / 할 수없는 일, 그가 가진 권한, 제한 사항을 정의 할 때이를 정의라고합니다.
그래서 말
SoftwareEngineer se;
선언을 의미합니다.
과
class SoftwareEngineer {
// define role and responsibilities
}
정의를 의미합니다. 도움이 되었기를 바랍니다.
답변
Java
언어는 정의를 사용하지 않고 용어 선언 만 정의합니다.
선언:
class A{}// class declaration
String str;// variable declaration
답변
선언 (declaration) : 식별자를 설정하고 그 저장소 (데이터 용)를 예약하거나 구현 (메소드 용)을 제공하지 않고 속성을 연관시키는 문.
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
정의 : 스토리지 (데이터 용)를 예약하거나 구현 (메소드 용)을 제공하는 선언입니다.
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)