[java] Java POJO에서 필드, 변수, 속성 및 속성의 차이점은 무엇입니까?

게터 / 세터가있는 Java POJO의 내부 개인 변수를 언급 할 때 다음 용어를 사용했습니다.

  • 변하기 쉬운
  • 속성
  • 특성

위의 차이점이 있습니까? 그렇다면 올바른 용어는 무엇입니까? 이 엔티티가 지속될 때 사용할 다른 용어가 있습니까?



답변

여기에서 : http://docs.oracle.com/javase/tutorial/information/glossary.html


    • 클래스의 데이터 멤버 달리 지정하지 않으면 필드는 정적이 아닙니다.

  • 특성

    • 창의 색상과 같이 사용자가 설정할 수있는 객체의 특성.

  • 속성

    • 위의 용어집에 나열되지 않음

  • 변하기 쉬운

    • 식별자로 명명 된 데이터 항목. 각 변수에는 int 또는 Object와 같은 유형과 범위가 있습니다. 클래스 변수, 인스턴스 변수, 로컬 변수를 참조하십시오.

답변

그렇습니다.

변수 는 로컬, 필드 또는 상수 일 수 있습니다 (기술적으로 잘못 되었더라도). 애매 모호한 속성입니다. 또한 일부 사람들은 정적이 아닌 최종 (로컬 또는 인스턴스) 변수 를 호출하는 것을 좋아 합니다.

“. 아마도 Scala와 같은 새로운 JVM FP 언어에서 비롯된 것입니다.

필드 는 일반적으로 인스턴스 클래스의 전용 변수입니다. 게터와 세터가 있다는 의미는 아닙니다.

속성 은 모호한 용어입니다. XML 또는 Java Naming API와 쉽게 혼동 될 수 있습니다. 해당 용어를 사용하지 마십시오.

속성 은 게터와 세터 조합입니다.

아래 몇 가지 예

public class Variables {

    //Constant
    public final static String MY_VARIABLE = "that was a lot for a constant";

    //Value
    final String dontChangeMeBro = "my god that is still long for a val";

    //Field
    protected String flipMe = "wee!!!";

    //Property
    private String ifYouThoughtTheConstantWasVerboseHaHa;

    //Still the property
    public String getIfYouThoughtTheConstantWasVerboseHaHa() {
        return ifYouThoughtTheConstantWasVerboseHaHa;
    }

    //And now the setter
    public void setIfYouThoughtTheConstantWasVerboseHaHa(String ifYouThoughtTheConstantWasVerboseHaHa) {
        this.ifYouThoughtTheConstantWasVerboseHaHa = ifYouThoughtTheConstantWasVerboseHaHa;
    }

}

더 많은 조합이 있지만 손가락이 피곤해집니다. 🙂


답변

JAXB를 사용하여 질문을 받았고 올바른을 선택하고 싶다면 XMLAccessType같은 질문이 있습니다. JAXB Javadoc에 따르면 “필드”는 비 정적 비 일시적 인스턴스 변수입니다. “속성”에는 게터 / 세터 쌍이 있습니다 (따라서 개인 변수 여야 함). “공개 멤버”는 공개이므로 상수 일 수 있습니다. 또한 JAXB에서 “속성”은에서와 같이 XML 요소의 일부를 나타냅니다 <myElement myAttribute="first">hello world</myElement>.

일반적으로 Java “속성”은 최소한 getter 또는 값을 얻을 수있는 다른 공용 메소드가있는 필드로 정의 될 수 있습니다. 어떤 사람들은 또한 재산에 세터가 필요하다고 말합니다. 이와 같은 정의의 경우 컨텍스트가 모든 것입니다.


답변

Dietel과 Dietel은 필드 대 변수를 설명하는 좋은 방법이 있습니다.

“클래스의 정적 변수와 인스턴스 변수를 함께 필드라고합니다.” (6.3 장)

“변수는 클래스의 둘 이상의 메소드에 사용되어야하거나 프로그램이 클래스의 메소드 호출 사이에 값을 저장해야하는 경우에만 필드로 선언해야합니다.” (6.4 단원)

따라서 클래스의 필드는 정적 또는 인스턴스 변수입니다. 즉 클래스 범위로 선언됩니다.

참조-Dietel P., Dietel, H.-Java ™ 프로그래밍 방법 (초기 객체), 10 판 (2014)


답변

최대 절전 모드에서 실마리를 얻는 경우 :

최대 절전 모드는 필드를 사용하여 객체의 상태를 읽거나 씁니다. Hibernate는 또한 Java Bean 스타일 속성을 DB Schema에 매핑합니다. 최대 절전 모드 개체로드 / 저장 필드에 액세스합니다. 속성에 의해 매핑이 수행되는 경우, 최대 절전 모드는 getter 및 setter를 사용합니다.

필드에 대한 getter / setter가있는 특성을 차별화하는 Encapsulation은 특성이라고하며 setMethod 내에서 해당 특성의 기본 데이터 구조를 숨기므로 setter 내부에서 원치 않는 변경을 방지 할 수 있습니다. 캡슐화의 약자 …

필드 를 사용하기 전에 선언하고 초기화해야합니다. 주로 수업 내부 용.

속성 은 setter에 의해 변경 될 수 있으며 getter에 의해 노출됩니다. 여기 필드 가격에는 게터 / 세터가 있으므로 속성입니다.

class Car{
 private double price;
 public double getPrice() {…};
 private void setPrice(double newPrice) {…};
}

<class name="Car" …>
<property name="price" column="PRICE"/>
</class>

마찬가지로 fields 사용 , [최대 절전 모드에서는 필드를 사용하여 MAP하는 권장 방법입니다. 여기서 private int id; @Id로 주석을 달지만 Property를 사용하면 더 많은 제어권을 갖습니다.]

class Car{
  private double price;
}
<class name="Car">
<property name=" price" column="PRICE" access="field"/>
</class>

Java doc : Field는 클래스의 데이터 멤버입니다. 필드는 정적이지 않고 일시적이지 않은 인스턴스 변수입니다. 필드는 일반적으로 인스턴스 클래스의 전용 변수입니다.


답변

변수는 필드와 비 필드로 구성됩니다.

필드는 다음 중 하나 일 수 있습니다.

  1. 정적 필드 또는
  2. 비 정적 필드 (인스턴스라고도 함) 예 : x = F ()

비 필드는 다음 중 하나 일 수 있습니다.

  1. 지역 변수, 필드의 유사하지만 모든 외부가 아닌 메소드 내부
  2. 매개 변수 예 : x의 y = f (y)

결론적으로 변수 사이의 주요 차이점은 변수가 필드인지 아닌지, 즉 메소드 내부에 있는지 또는 모든 메소드 외부에 있는지를 나타냅니다.

기본 예 (내 구문에 실례합니다, 저는 초보자입니다)

Class {
    //fields    

    method1 {
         //non-fields    

    }
}


답변

실제로이 두 용어는 종종 같은 것을 나타내는 데 사용되지만 예외적 인 상황이 있습니다. 필드는 객체의 상태를 저장할 수 있습니다. 또한 모든 필드는 변수입니다. 따라서 필드가 아닌 변수가있을 수 있습니다. 따라서 4 가지 유형의 변수 (클래스 변수, 인스턴스 변수, 로컬 변수 및 매개 변수)를 살펴보면 클래스 변수와 인스턴스 변수가 객체의 상태에 영향을 줄 수 있음을 알 수 있습니다. 즉, 클래스 또는 인스턴스 변수가 변경되면 객체의 상태가 변경됩니다. 따라서 클래스 변수와 인스턴스 변수는 필드이지만 로컬 변수와 매개 변수는 그렇지 않다고 말할 수 있습니다.

더 깊이 이해하려면 아래 소스로 이동하십시오.

http://sajupauledayan.com/java/fields-vs-variables-in-java