강박적으로 신뢰하기

빌은 그의 이웃 질(Jill)의 증언에 대해 강박적으로 신뢰하는 성향을 가진 사람이다. 그는 질에게 강한 집착을 보이는 낭만적 관심을 가지고 있으며, 질의 말을 믿을 만한 아주 좋은 이유가 있을 때뿐만 아니라, 믿지 말아야 할 아주 강력한 이유가 있을 때조차도 그녀를 불신할 수 없는 사람이다. 예를 들어, 질이 의도적으로 거짓말을 하거나 속이려 한다는 압도적인 증거가 있어도, 빌은 그런 사실을 믿을 수가 없다. 실제로, 질을 신뢰하지 말아야 한다는 증거가 아무리 많아도, 빌은 그녀를 신뢰하는 태도를 버릴 수 없다.

어제 오후 산책을 하던 중, 빌은 질을 우연히 만났고, 질은 그날 보트를 타고 나갔다가 범고래를 봤다고 말했다. 물론 빌은 그녀의 말을 아무 의심 없이 그대로 받아들였다. 실제로 질은 그날 보트 여행 중 범고래를 목격했고, 일반적으로도, 또 그 특정한 경우에도 인식적으로 매우 신뢰할 수 있는 사람이다. 그리고 빌은 그녀의 증언을 의심할 만한 아무런 이유도 가지고 있지 않았다. 하지만 빌의 질에 대한 강박적인 신뢰 성향을 고려할 때, 만약 그에게 질이 범고래를 보지 못했음을 보여주는 방대한 증거, 질이 인식적으로 또는 증언자로서 신뢰할 수 없다는 증거, 이 지역에는 범고래가 서식하지 않는다는 증거 등이 있었더라도, 그는 여전히 그녀의 말을 똑같이 믿었을 것이다.

// 일반적인 Trust 클래스: 다른 사람에 대한 testimony를 처리
class Trust {
  constructor(evidenceEvaluator) {
    this.evidenceEvaluator = evidenceEvaluator;
  }

  trust(testimony) {
    if (this.evidenceEvaluator(testimony)) {
      console.log("Trust granted based on sufficient evidence.");
    } else {
      console.log("Trust withheld due to lack of evidence.");
    }
  }
}

// Jill-specific Trust subclass: evidence와 관계없이 신뢰함 (강박적 신뢰)
class TrustJill extends Trust {
  trust(testimony) {
    console.log("Trust granted compulsively (Jill).");
  }
}

// Evidence 평가 함수
function evaluateEvidence(testimony) {
  // 간단한 조건: testimony의 신뢰도가 0.7 이상이면 신뢰
  return testimony.credibility >= 0.7;
}

// Bill의 신뢰 시스템 구성
const trustOthers = new Trust(evaluateEvidence);
const trustJill = new TrustJill(evaluateEvidence);

// 예시 testimony 객체
const testimonyFromTom = { speaker: "Tom", credibility: 0.9 };
const testimonyFromJill = { speaker: "Jill", credibility: 0.2 };

// 출력
trustOthers.trust(testimonyFromTom);  // "Trust granted based on sufficient evidence."
trustJill.trust(testimonyFromJill);   // "Trust granted compulsively (Jill)."