메소드없이 클래스를 무엇이라고 부릅니까?


10

메소드없이 클래스를 무엇이라고 부릅니까?

예를 들어

class A
{
  public string something;
  public int a;
}

위의 방법이없는 클래스입니다. 이 유형의 클래스에는 특별한 이름이 있습니까?


1
방법이없는 수업?
ChaosPandion

11
기술 용어는 record 또는 struct 입니다.
Kilian Foth

4
"속성 가방"
Martin York

킬리안 : 나는 추가 된 의미로 "예찬 화 된 구조체"를 선호한다.
Jason

답변:


23

대부분의 경우 : 안티 패턴.

왜? "연산자"클래스와 데이터 구조로 절차 적 프로그래밍을 용이하게하기 때문입니다. 정확히 OOP가 아닌 데이터와 동작을 분리합니다.

종종 : DTO (Data Transfer Object)

비즈니스 / 도메인 개체에서 파생 된 데이터를 교환하기위한 데이터 구조 만 읽습니다.

때때로 : 단지 데이터 구조.

글쎄, 때로는 단순하고 단순하며 조작이없는 데이터를 보유하는 구조를 가져야합니다. 그러나 공개 필드를 사용하지 않고 접근 자 (getter 및 setter)를 사용합니다.


4
나는 모든 사람들이 자바에서 공개 게터 / 세터만으로 클래스를 수행하지 말 것을 권장합니다. 브레인 데드이며 일부 컨테이너는 세터 / 게터 코드 (Glassfish를 보았습니다 ...)를 실행하지 않으므로 기본값이거나 곤충. OOP 캡슐화가 옳았다 고 생각하지 않습니다. 대부분의 응용 프로그램에서 DTO가 필요 할뿐만 아니라 가장 자주 사용되는 클래스입니다. 반 패턴 외에는 "기본 빌딩 블록"이라는 단어를 대신 사용합니다.
Aadaam

8
그들은있어 어쩌면 당신이 엄격 OO 환경에 있다면 안티 패턴. 다른 모든 프로그래밍 세계에서, 단순한 이기종 필드 모음 인 데이터 구조를 갖는 것이 대안에 비해 분명한 이점이며, 잘 알려진 OO 메인 스테이 에서도 권장됩니다 .
Telastyn

@Aadaam : 당신은 나를 제대로 얻지 못했습니다. DTO는 반 패턴이 아닙니다. 때때로 이러한 객체는 DTO 인 경우 완벽하게 훌륭합니다! 그리고 Glassfish가 getter와 setter를 보지 않으면 glassfish가 잘 작성되지 않았다는 것을 의미합니다 (내장 된 접근자가없는 Java에서는 어렵지만). 이 코드는 브레인 데드가 아니며 유용한 상용구입니다.
팔콘

4
빨리 @Aadaam. 누군가 필드를 유효하지 않은 값으로 설정하여 나중에 읽을 때 혼란스러워합니다. 범인을 감지 할 수 있도록 예외를 던지십시오. 1,000 곳에서 사용되는 공공 장소에서 처음으로 그런 일을해야한다면 세터를 원할 것입니다. 퍼블릭 필드는 그 자리를 차지하지만 게터 / 세터 패러다임은 좋은 이유로 인기가 있습니다.
Karl Bielefeldt

@KarlBielefeldt : 하나의 glassfish 버전에서 테스트가없는 setter 코드에서 단일 예외가있었습니다 (조건없이). 이 부동산은 전용 변수와 2 개의 공공 게터를 가지고있었습니다. 용기는 단순히 세터를 우회했습니다. 실제로 잘못된 값이있는 경우 개인적으로 기본 값 대신 유형 클래스를 선호하지만 어쩌면 나뿐입니다.
Aadaam

9

내가 전화 줄 struct이나 record는 데이터 저장을 위해 사용되며,이 같은 언어에 매우 일반적이기 때문에 C당신이 볼 수 : 구조체 (C 프로그래밍 언어) . 따라서 개인적 struct으로 더 적합하고 읽기 쉬운 클래스 대신에 사용하는 것이 좋습니다.

struct A
{
  public string something;
  public int a;
}

일반적으로 이들은 다른 사람들과 마찬가지로 DTO (Data Transfer Object) 로 사용됩니다 .


4
struct의 문제점은 "struct"가 여러 언어로 된 키워드라는 것입니다. 예를 들어 C #은 구조체를 의미가 다른 값 유형으로 취급합니다. 일부 언어 (PL / SQL)의 "레코드"에 대해서도 마찬가지입니다.
팔콘

5

이것들은 일반 올드 __ 객체 빈은 Java 또는 C 또는 CIL, 또는 당신이 사용하는 어떤 언어입니다 (PO_Os).

통신을 위해 간단한 데이터 블록으로 사용되는 경우 다음과 같이 알 수 있습니다. 데이터 전송 개체 (DTO) .

외부에서 제공 한 일부 데이터를 나타내는 경우 엔티티 라고 할 수 있습니다 .


6
당신은 POD를 생각하고 있습니다-매우 다른 생각입니다. POJO에는 명시 적으로 "비즈니스 로직"이 포함되지만 특정 프레임 워크에 대한 종속성은 제외됩니다.
Tom Hawtin-tackline

POD는 최소한 C ++로 메소드를 가질 수 있습니다. 그들은 간단한 생성자, 소멸자, 복사 생성자 및 할당 생성자, 공개 데이터 멤버, 기본 클래스 및 가상 함수가 없어야합니다. 기본적으로 C 구조체와 호환되어야합니다.
Dirk Holsopple

2

그런 클래스를 변경 가능한 데이터 홀더라고 부르고 때로는 일반적인 형식을 사용했습니다.

class DataHolder<T>
{
   public T dat;
}

dat속성 내에서 줄 바꿈 하면 성능이 저하되고 이점이 없습니다. 속성 접근자가 필드를 읽거나 쓰지 않는 것 외에는 일부 구현이 중단되지 않으므로 수행 할 수있는 작업이 없기 때문입니다. 또한 Interlocked메소드 를 사용해야 할 수도 있지만 dat필드가있는 구조체 인 경우 메소드 를 사용해야 할 수도 있습니다.dat 속성에 래핑 된 .

변경 가능한 데이터 홀더는 데이터를 보유 해야하는 유형 (변경 가능 여부)에 유용 할 수 있지만 변경 불가능한 유형과 동일한 방식으로 데이터 교환에 안전하게 사용할 수는 없습니다. 예를 들어,

myData = myCollection.GetData(myKey);

다음과 같은 경우 명확한 의미를 갖습니다 GetData변경 불가능한 클래스 유형 또는 변경 가능한 데이터에 대한 참조를 포함하지 않은 구조체 ( "변경 가능" 반환하는 . 그러나 변경 가능한 클래스 객체를 반환 한 경우 해당 객체의 변경 사항이 기본 컬렉션에서 지속적으로 무시되는지, 지속적으로 업데이트되는지, 또는 설명을 충족하지 않는 어리 석거나 예측할 수없는 동작이 발생하는지 확실하지 않습니다.

컬렉션이 변경 가능한 객체에서 데이터를 반환하도록하려면 올바른 패러다임은 종종 다음과 같습니다.

var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);

이 접근 방식을 사용 하면 컬렉션의 데이터로 채워지 GetData는 명확한 함의가 myData있지만 myCollection함수가 완료된 후에는 참조를 유지하거나 다른 용도로 사용하지 않을 것으로 예상됩니다. StoreData마찬가지로 myData참조를 유지하지 않고 자체 내부 데이터 구조에 정보 를 복사합니다 . 이 접근 방식의 한 가지 장점은 클라이언트 코드가 루프 내에서 많은 데이터 항목을 읽는 myData경우 루프 외부에서 하나의 인스턴스를 안전하게 작성한 다음 매번 동일한 인스턴스를 재사용 할 수 있다는 것입니다. 마찬가지로, myCollection새 인스턴스를 만들지 않고도 키와 관련된 개체 인스턴스를 다시 사용할 수 있습니다 (전달 된 인스턴스에서 데이터 복사).


0

상황에 따라 엔터티라고합니다. 지루한 비즈니스 응용 프로그램에서는 대개 1 : 1을 내 DER에 매핑합니다.


0

나는 그것을이라고 부를 것이다 Schema.

여기에는 데이터베이스 테이블 또는 역 직렬화 된 레코드 또는 DTO 등을 나타내는 여러 용도가 포함됩니다.

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