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


142

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

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

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

답변:


117

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


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

  • 특성

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

  • 속성

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

  • 변하기 쉬운

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

27
필드와 속성의 차이점을 여전히 이해하지 못합니까?
Koray Tugay

1
@KorayTugay-필드를 객체와 관련된 기초적인 데이터 조각으로 봅니다. (나에게) 속성은 외부 세계에 보이는 (그리고 명백하게 변경 가능한) 객체의 특성입니다.
jahroy

위의 내용을 바탕으로 "속성이 설정 가능한 필드라는 점을 제외하고 속성과 필드가 동일합니다"라고 말하는 것이 공정 합니까?
jdurston

2
@John-아마도 위에서 언급했듯이 Oracle의 복사 / 붙여 넣기 일 것입니다. 개인적으로 나는 속성이 공개적으로 보이고 변경 가능하다는 구별을 만들고 반면 필드 는 클래스에서만 사용되는 내부 개인 필드 일 있습니다.
jahroy

1
가장 강조해야 할 것은 분야로서의 존재와 재산이 상호 배타적이지 않다는 것입니다. 이 답변의 말에서 새로운 개발자들에게 그것은 독특한 것들의 목록처럼 보입니다.
Kartik Chugh

89

그렇습니다.

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

" ". 아마도 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;
    }

}

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


3
@Chris Thompson 이것이 Eclipse가 대화 상자 중 하나에서 호출하는 것입니다. 안녕하세요. Java입니다. 내가 무엇을 말할 수 있습니까? 말이되지 않습니다.
Adam Gent

4
@AdamGent JAVA = 그냥 또 다른 모호한 약어 :)
emory

@emory 글쎄, 그것은 오래된 잘 알려진 oxymoron입니다. 그것은 자바에만 해당되는 것이 아니며, "문제"는 최소한 C 이상으로 거슬러 올라갑니다. 아마도 "일정한"이라고 부르는 것을
막을

@AdamGent 진지하지 않았다, 단지 당신에게 힘든 시간을주는 ;-)
Chris Thompson

1
식별자 이름이 엄청나게 길어질 수있는 방법을 재미있게 설명하면서 좋은 설명을합니다.
sargas

5

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

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


5

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

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

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

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

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


3

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

최대 절전 모드는 필드를 사용하여 객체의 상태를 읽거나 씁니다. 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는 클래스의 데이터 멤버입니다. 필드는 정적이지 않고 일시적이지 않은 인스턴스 변수입니다. 필드는 일반적으로 인스턴스 클래스의 전용 변수입니다.


2

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

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

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

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

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

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

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

Class {    
    //fields    

    method1 {              
         //non-fields    

    }    
}

1

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

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

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


0

문제는 오래되었지만 변수와 필드의 또 다른 중요한 차이점은 필드가 선언 될 때 필드가 기본값을 얻는다는 것입니다. 반면에 변수는 초기화해야합니다.


재산은 어떻습니까?
Koray Tugay

0

내 이해는 다음과 같으며 이것이 100 % 정확하다고 말하고 있지는 않습니다.

변수는 당신이 어떤 수있는 기본 변화, 선언하고 다른 값을 가지고 있지만, 그 또한 명시 적으로 마지막이라고 할 수있는 무언가이다. Java에서는 다음과 같습니다.

public class Variables {

    List<Object> listVariable; // declared but not assigned
    final int aFinalVariableExample = 5; // declared, assigned and said to be final!

    Integer foo(List<Object> someOtherObjectListVariable) {
        // declare..
        Object iAmAlsoAVariable;

        // assign a value..
        iAmAlsoAVariable = 5;

        // change its value..
        iAmAlsoAVariable = 8;

        someOtherObjectListVariable.add(iAmAlsoAVariable);

        return new Integer();
    }
}

따라서 기본적으로 변수는 선언되고 값을 보유 할 수있는 모든 것입니다. 위의 메소드 foo는 예를 들어 변수를 리턴합니다. 새 Integer ()의 메모리 주소를 보유하는 Integer 유형의 변수를 리턴합니다. 위에서 볼 수있는 모든 것은 변수 listVariable, aFinalVariableExample이며 여기에 설명되어 있습니다.

필드는 범위가 더 명확한 (또는 구체적) 변수입니다. 위의 예에서는 foo 메소드의 범위에서 반환되는 변수가 명확하지 않으므로 필드라고 부르지 않습니다. 반면, iAmAlsoVariable은 "foo"메소드의 범위로 제한되는 "로컬"필드이고 listVariable은 필드 범위 (변수)가 객체 범위에 의해 제한되는 "인스턴스"필드입니다.

속성은 액세스 / 변경할 수있는 필드입니다. 게터 / 세터를 노출하는 모든 필드는 속성입니다.

나는 속성에 대해 알지 못하며 이것이 변수, 필드 및 속성에 대한 나의 이해라는 것을 반복하고 싶습니다.


0
  • variable-명명 된 저장소 주소. 모든 변수에는 메모리 크기, 속성 및 동작을 정의하는 유형이 있습니다. 자바 변수의 유형이있다 : class variable, instance variable, local variable,method parameter
//pattern
<Java_type> <name> ;

//for example
int myInt;
String myString;
CustomClass myCustomClass;
  • field-멤버 변수 또는 데이터 멤버 그것은 인 variable내부 A를 class( class variable또는 instance variable)

  • attribute-일부 기사에서는 해당 attribute내용이 object대표적 임을 알 수 있습니다 class variable. Object함으로써 동작 attributes특성 세트를 정의한다.

CustomClass myCustomClass = new CustomClass();
myCustomClass.something = "poor fantasy"; //something is an attribute of myCustomClass object with a "poor fantasy" value
  • property- field+ 경계 getter/setter. 필드 구문이 있지만 후드 아래에서 메소드를 사용합니다. Java순수한 형태로 지원하지 않습니다. 한 번 봐 Objective-C, Swift,Kotlin

예를 들어 Kotlin샘플 :

//field - Backing Field
class Person {
    var name: String = "default name"
        get() = field
        set(value) { field = value }
}

//using
val person = Person()
person.name = "Alex"    // setter is used
println(person.name)    // getter is used

[스위프트 변수, 속성]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.