CodeGym /Java Blog /무작위의 /Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요. 3부
John Squirrels
레벨 41
San Francisco

Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요. 3부

무작위의 그룹에 게시되었습니다
안녕! 특별한 훈련 없이는 비행기 조종 방법을 배울 수 없듯이, 필요한 이론적 기초를 오랜 시간 공부하지 않고서는 Java 개발자가 될 수 없습니다. 이것이 바로 오늘 우리가 작업할 내용입니다. 우리는 Java 개발자의 취업 면접 중에 직면한 질문을 계속해서 탐색하고 그에 대한 답변도 살펴볼 것입니다. 이 개요의 첫 번째 부분 과 두 번째 부분은 다음과 같습니다 . 이러한 모든 질문 없이도 훌륭한 Java 개발자가 될 수 있다는 데에는 의심의 여지가 없습니다. 즉, Java의 모든 복잡성을 잘 이해하고 있다면 확실히 이점을 갖게 될 것이며 미래 고용주의 눈에 더 매력적으로 보일 것입니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 3 - 1

20. 언어의 어떤 요소가 캡슐화를 가능하게 합니까?

캡슐화는 클래스의 구현 세부 사항을 숨기는 것임을 기억해 봅시다. 즉, 우리 클래스를 사용할 때 그 내부와 내부 논리가 외부인에게 명확하지 않습니다. 그리고 이를 담당하는 언어 요소는 무엇입니까? 물론 액세스 수정자 ! 숨길 필요가 있는 것은 모두 private 한정자로 표시합니다. 예를 들어, 일부 내부 기능을 구현하는 데 도움이 되는 클래스의 비공개 필드 또는 일부 내부 메서드입니다. 그리고 외부 액세스를 제공하려는 모든 항목에 대해 공개 액세스 수정자를 추가합니다. 예를 들어 내부적으로 많은 비공개 메소드를 사용할 수 있는 일부 기능을 구현하는 메소드 또는 클래스의 비공개 필드에 액세스하기 위한 getter 및 setter가 있습니다. 우리는 더 유연하게 사용할 수 있고 특정 클래스 부분에 대한 액세스를 구체적으로 사용자 정의할 수 있는 기본보호된 수정자에 대해서는 아직 언급하지 않았습니다 .

21. 언어의 어떤 요소가 상속을 가능하게 합니까?

상속은 다른 클래스를 기반으로 클래스를 만들 수 있는 메커니즘입니다. Java에는 이를 위한 확장 키워드가 있습니다. 예를 들어 Cat 클래스가 있고 Lion 하위 클래스를 만들고 싶다고 가정해 보겠습니다 . 코드에서는 다음과 같습니다.
public class Lion extends Cat
이는 Lion 클래스가 정적 변수를 제외한 Cat 클래스 의 모든 메서드와 변수를 상속한다는 의미입니다. 상속을 담당하는 언어의 또 다른 요소는 super 입니다 . 이것 과 비슷한 참고자료입니다 . this 키워드 는 참조되는 개체를 나타냅니다. super 키워드 현재 개체의 부모를 나타냅니다. 일반적으로 super가 사용됩니다.
  1. 슈퍼클래스의 생성자를 호출합니다. 예를 들어 Cat 클래스 에는 생성자에서 초기화해야 하는 내부 이름 변수가 있습니다. Lion 클래스 생성자 에서는 다음과 같습니다.

    public Lion(final String name) {
       super(name);
    }

  2. 상위 항목의 필드와 메서드를 참조합니다. 예를 들어 Cat 클래스에는 초기화된 age 필드가 있습니다 .

    public class Cat {
       int age = 10;

하지만 Lion 에는 동일한 초기화 필드가 있습니다 .
public class Lion extends Cat {
   int age = 15;
그리고 Lion 객체에서 상위 객체의 age 변수를 참조하려면 super를 통해 이를 수행해야 합니다 .
super.name

22. 언어의 어떤 요소가 다형성을 담당합니까?

다형성은 하나의 서명을 가진 객체가 다양한 형태(다양한 구현)를 취할 수 있는 능력입니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 3 - 2우리는 Java의 구현확장 키워드가 다형성을 담당한다고 자신있게 말할 수 있습니다. 인터페이스가 있을 때 구현을 통해 하나의 가능한 구현을 제공할 수 있지만 그것이 유일한 구현일 필요는 없습니다. 그렇죠? Implements를 사용하는 방법을 다시 살펴보겠습니다 .
public class Cat implements Animal
그런 다음 Cat 클래스 에서 Animal 인터페이스 의 모든 추상 메서드를 구현해야 합니다 . 상속도 마찬가지입니다. 자식 클래스에서는 메서드의 기존 구현을 재정의할 수 있습니다. 즉, 여러 하위 클래스를 사용하면 동일한 메서드에 대해 여러 가지 다른 재정의를 가질 수 있습니다. 또는 슈퍼클래스는 추상적일 수 있으며 각 하위 클래스에서 특별한 방식으로 구현되어야 하는 특정 메서드를 가질 수 있습니다. 즉, 이 메서드에는 다양한 구현이 있습니다. @Override 주석 도 이에 도움이 될 수 있습니다. 이는 구현된 메서드 위에 배치되며, 슈퍼클래스나 인터페이스의 특정 메서드를 구현하거나 재정의(구현이 이미 슈퍼클래스에 존재하는 경우)한다는 것을 나타냅니다. 이는 선택 사항이며 오류를 보다 쉽게 ​​감지하는 데 도움이 됩니다. 이 주석을 사용하여 슈퍼클래스/인터페이스 메서드를 재정의/구현하고 싶다고 컴파일러에 알립니다. 그러면 컴파일러는 메서드 서명에 실수가 없는지 확인합니다.

23. 솔리드란 무엇인가요? 예시 제공

SOLID 는 Robert Martin의 5가지 기본 OOP 디자인 원칙의 약어입니다. S(단일 책임 원칙) : 클래스에는 하나의 목적/책임만 있어야 함을 나타냅니다. 즉, 모든 작업을 수행하는 클래스를 생성해서는 안 됩니다. 그렇게 하면 "God Object" 안티 패턴을 재현할 수 있습니다. Cat 개체가 있는 경우 내부 기능과 상호 작용하기 위한 메서드만 있어야 하지만 해당 인스턴스와 관련되지 않은 비즈니스 논리를 포함해서는 안 됩니다. 예를 들어, 이러한 유형의 객체를 저장하는 일부 메커니즘이 있습니다. 이 기능( Cat 엔터티 외부 )은 해당 개체에 대한 비즈니스 논리를 제공하는 작업을 수행하는 다른 클래스나 서비스로 이동해야 합니다. O(개방-폐쇄 원칙) : 이 원칙은 다음과 같이 설명됩니다. 소프트웨어 엔터티(클래스, 모듈, 기능 등)는 확장에는 개방적이고 수정에는 폐쇄되어야 합니다. 예를 들어 기존 Cat 클래스의 기능과 유사하지만 약간 다른 기능이 필요하다고 가정해 보겠습니다. Cat 클래스 의 기능을 변경하여 이미 사용되는 모든 곳에서 코드를 깨뜨리는 대신 상속이나 합성을 사용할 수 있습니다 . 따라서 우리는 Cat 클래스 의 기능을 수정하려는 목표를 달성했으며 클래스 자체를 변경하지 않고 아무 것도 손상시키지 않고 이를 수행했습니다. L(Liskov 대체 원리) : 바바라 리스코프의 대체 원리입니다. 원칙에 따르면 기본 유형을 취하는 함수는 무슨 일이 일어나고 있는지 알지 못한 채 해당 기본 유형의 하위 유형을 사용할 수 있어야 합니다. 예를 들어 Cat 클래스는 동작을 근본적으로 변경하지 않고도 Lion 과 같은 자손으로 대체할 수 있어야 합니다 . 일반적인 논리(동작)는 동일하게 유지되지만 특정 기능의 구현 세부 사항은 변경됩니다. I(인터페이스 분리 원칙) : 이 원칙은 하나의 범용 인터페이스보다 전문화된(좁게 초점을 맞춘) 인터페이스를 여러 개 갖는 것이 더 낫다는 것을 나타냅니다. 예를 들어 개발자가 일부 인터페이스를 구현한다고 가정해 보겠습니다. 메서드 중 하나만 필요하지만 인터페이스에는 필요한 메서드의 논리와 관련되지 않은 메서드가 9개 더 있습니다. 이 경우 개발자는 10개의 인터페이스 메서드를 구현해야 하며 그 중 9개는 불필요합니다! 대신 필요에 따라 구현할 수 있는 10개의 서로 다른 인터페이스를 만드는 것이 더 좋습니다. 글쎄, 10개는 아니더라도 여러 개는 인터페이스의 단일 목적과 밀접하게 관련된 메소드를 가지고 있습니다. D(의존성 역전 원리): 상위 모듈은 하위 모듈에 의존해서는 안 된다는 원칙입니다. 이 원칙은 또한 "추상은 세부 사항에 의존해서는 안 됩니다. 세부 사항은 추상화에 의존해야 합니다."라고 말합니다. 인터페이스를 참조하여 논리를 구축하고 필요한 인터페이스를 구현하는 클래스의 구체적인 개체를 전달해야 합니다. 예를 들어 Cat 인터페이스와 LionHouseCat 과 같은 일부 구현이 있다고 가정합니다 . 우리는 Cat 인터페이스와 상호 작용하기 위해 특별히 로직을 구축했습니다. 그런 다음 인터페이스를 특정 구현( Lion 또는 HouseCat )으로 대체하지만 그 반대는 아닙니다.

24. 클래스, 객체, 인터페이스란 무엇인가요?

우리는 Java가 OOP 언어라는 것을 기억할 것입니다. 즉, Java 프로그램은 객체 간의 상호 작용을 기반으로 구축됩니다. 프로그램은 개미집과 같아서 개미 하나하나가 객체입니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 3 - 3객체는 내부 데이터와 상호 작용하기 위한 다양한 방법(함수)을 포함하는 데이터 모음입니다. 클래스는 객체를 생성하기 위한 지침 또는 템플릿입니다. 이는 동일한 지침에 따라 구축되었지만 다른(또는 동일한) 데이터로 채워진 많은 객체를 가질 수 있음을 의미합니다. 실생활의 예를 들면, 클래스는 건물의 청사진이고, 객체는 청사진에 따라 구체적으로 지어진 건물이라고 말할 수 있습니다. 인터페이스는 클래스와 유사하지만 객체를 생성하는 데 사용할 수는 없습니다. 그들의 목적은 Java에 추상화를 추가하는 것입니다. 보다 정확하게는 클래스와 객체 간의 관계에 유연성을 추가합니다. 유연성이란 앞서 설명한 다형성과 추상화를 의미하며, 이는 애플리케이션의 내부 아키텍처를 구축할 수 있는 많은 기회를 창출합니다.

25. POJO 클래스란 무엇입니까? 그러한 수업의 예를 들어보세요.

Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 3 - 4POJO (Plain Old Java Object)는 특정 클래스로부터 상속받지 않고 비즈니스 모델에 필요한 것 이상의 서비스 인터페이스를 구현하지 않는 간단한 클래스 객체입니다. 즉, POJO 클래스는 특별한 요구 사항이 없는 클래스일 뿐입니다. 유일한 요구 사항은 특정 프레임워크에 연결된 다양한 부가 기능이 없다는 것입니다. 일반적으로 이러한 클래스는 다른 클래스를 상속하지 않으며( 동일 패키지의 POJO 클래스 제외), 인터페이스를 구현하지 않으며(때때로 Serialized 또는 Cloneable 과 같은 표준 라이브러리의 마커 인터페이스에 대해 예외가 발생함 ), 주석을 사용하지 않습니다. , 타사 라이브러리에 의존하지 않습니다. POJO에는 비즈니스 논리와 모든 종류의 생성자를 포함하는 메서드가 있을 수 있습니다. 클래스의 의미를 변경하지 않는 주석(즉, 부재가 객체의 목적이나 논리를 변경하지 않는 주석)을 허용하는 경우 POJO 에는 XML 또는 JSON 에서 역직렬화된 JPA 엔터티 및 DTO 객체 도 포함될 수 있습니다 . 해당 규칙은 다음과 같습니다. 주석에 지정됩니다. POJO 클래스 와 관련하여 명심해야 할 또 다른 사항은 해당 클래스의 equalshashCode 메서드를 재정의하는 것이 좋다는 것입니다. 이렇게 하면 해당 역할을 더 잘 수행하는 데 도움이 될 수 있습니다. POJO 클래스 의 예 :
public class User {
   private Long id;
   private String firstName;
   private String lastName;
   private Long age;

   public User(final Long id, final String firstName, final String lastName, final long age) {
       this.id = id;
       this.firstName = firstName;
       this.lastName = lastName;
       this.age = age;
   }

   public Long getId() {
       return this.id;
   }

   public String getFirstName() {
       return this.firstName;
   }

   public String getLastName() {
       return this.lastName;
   }

   public Long getAge() {
       return this.age;
   }

   @Override
   public boolean equals(final Object o) {
       if (this == o) return true;
       if (o == null || this.getClass() != o.getClass()) return false;
       final User user = (User) o;
       return Objects.equals(this.id, user.id) &&
               Objects.equals(this.firstName, user.firstName) &&
               Objects.equals(this.lastName, user.lastName) &&
               Objects.equals(this.age, user.age);
   }

   @Override
   public int hashCode() {
       return Objects.hash(this.id, this.firstName, this.lastName, this.age);
   }
}

26. 클래스에는 어떤 요소가 포함될 수 있나요?

클래스에는 다음 요소가 포함될 수 있습니다.
  • 인스턴스 필드;
  • 정적 필드;
  • 초기화 블록;
  • 정적 초기화 블록;
  • 생성자(빈 생성자는 항상 기본적으로 선언됩니다)
  • 행동 양식;
  • 정적 메소드;
  • 다양한 주석(클래스 자체 또는 해당 구성 부분에 적용할 수 있음)
  • 제네릭 ;
  • 다른 클래스의 상속( 확장 ) 또는 인터페이스 구현( 구현 ).

27. Java의 상속에 대해 알려주세요. super 키워드의 구체적인 내용은 무엇입니까?

위에서 나는 이전에 Java의 상속과 super 키워드에 대해 이야기했습니다. 몇 가지 중요한 사항을 더 언급하겠습니다.
  1. 단일 클래스만 상속할 수 있습니다. Java에는 다중 상속이 없습니다. Java 8에 기본 메소드가 등장하면서 이 설명은 매우 논란의 여지가 있습니다.
  2. 전용 메서드와 필드도 상속됩니다. 하위 클래스에서는 액세스할 수 없습니다(그러나 예를 들어 비공개 필드가 있고 공개 또는 보호된 getter 및 setter 가 있는 경우 이를 사용하여 필드에 액세스할 수 있습니다).
  3. final 클래스는 상속될 수 없습니다.
  4. final 메소드는 재정의할 수 없습니다(그러나 상속 및 오버로드는 가능합니다).
  5. 정적 메서드와 변수는 상속되지 않습니다(객체가 아닌 클래스에 연결되기 때문).
  6. 추상 클래스를 상속할 때 해당 추상 메서드를 구현해야 합니다. 그렇지 않으면 자식 클래스도 추상으로 선언해야 합니다.
  7. 상위 클래스에 기본이 아닌 생성자가 있는 경우 하위 클래스에서 재정의해야 합니다(그러나 @Override 는 그 위에 작성되지 않습니다).
  8. 하위 클래스의 재정의된 메서드( private -> default -> protected -> public ) 로 액세스 한정자를 확장할 수 있습니다 .
  9. 하위 클래스에서 재정의된 메서드는 더 좁은 범위의 예외를 발생시킬 수 있습니다(예: Exception -> IOException -> FileNotFoundException).
Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 3 - 5

28. 메소드 서명이란 무엇입니까? 올바른 서명과 잘못된 서명의 예를 제공하세요.

메소드 서명은 메소드 이름과 입력 매개변수 유형(매개변수 순서가 중요함)을 합친 것입니다. 메서드 서명에는 반환 값이나 메서드에서 발생하는 예외가 포함되지 않습니다. 올바른 서명의 예:
doSomething(int, double, double)
잘못된 서명의 예:
void doSomething(int firstArg, int secondArg) throws Exception
반환 유형 및 발생한 예외 목록과 결합된 메서드 서명을 메서드 계약 이라고 합니다 . 오늘은 그게 다야! 나중에 봐요!
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION