Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vm인스턴스생성
- 코드스테이츠 백엔드
- List.of
- 자바
- 스택
- 싱글톤패턴
- MySQL
- 투포인터알고리즘
- 코드스테이츠
- java
- OOP
- 프로그래머스
- 구간합구하기
- GCP
- 알고리즘
- Array.asList
- String.valueOf()
- 재귀함수
- 클라우드에서 도커 실행하기
- 백준
- 코딩테스트
- 인텔리제이
- 재귀와반복문
- Spring MVC 동작원리
- Spring Web MVC
- 백준 11659
- 11659
- 버블정렬
- Spring MVC 구성요소
- 성능테스트툴
Archives
- Today
- Total
순간을 기록으로
[Java] - 상속(Inheitance), 캡슐화(Encapsulation) 질문들 본문
안녕하세요. 오늘도 저번과 마찬가지로 기술면접을 보는 상황을 가정하고 학습한 개념을 질문으로 만들어 봤습니다.
- OOP의 4가지 특징은 무엇인가요?
- 객체지향언어는 다음과 같은 4가지 특징이 있습니다.
- 상속(Inheritance)
- 캡슐화(Encapulation)
- 다형성(Polymorphism)
- 추상화(Abstraction)
- OOP의 5가지 설계 원칙은 무엇이 있나요?
- 객체지향언어에는 SOLID라는 5가지 설계 원칙이 있습니다.
- Single Responsibility Principle(SRP, 단일책임원칙): 객체는 하나의 책임만 가져야 한다.
- Open Close Principle(OCP, 개방 폐쇄 원칙): 기능을 추가할 때 기존의 코드 변경하지 않아야 한다.
- Liskov Substitution Priciple(LSP, 리스코프 치환 원칙): 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 문제가 없어야 한다.
- Interface Segregation Principle(ISP, 인터페이스 분리 원칙): 객체(클라이언트)는 자신이 이용하지 않은(호출하지 않은) 메소드에는 의존하지 말아야 한다.
- Dependency Inversion Principle(DIP, 의존성 역전 원칙): 하위클래스, 구체클래스에 의존하는 게 아닌 인터페이스, 추상클래스, 상위 클래스에 의존해야 한다.
- 클래스 간의 관계에는 어떤 관계들이 있나요?
- 상속관계
- 포함관계
- 포함관계(composite)란 무엇인가요?
- 포함관계란 클래스의 필드로 다른 클래스의 참조변수를 선언하는 것을 말합니다.
- 상속(Inheritance)이란 무엇인가요?
- 상속이란 상위 클래스의 멤버(필드, 메소드, 이너클래스)를 하위 클래스에게 물려주는 것을 말합니다. 물려주는 클래스를 상위클래스, 물려받는 클래스를 하위 클래스라고 합니다. 상속을 통해 두 클래스는 상속관계를 가집니다.
- 단, 부모 클래스의 private 멤버는 상속에서 제외됩니다.
- 상속이란 상위 클래스의 멤버(필드, 메소드, 이너클래스)를 하위 클래스에게 물려주는 것을 말합니다. 물려주는 클래스를 상위클래스, 물려받는 클래스를 하위 클래스라고 합니다. 상속을 통해 두 클래스는 상속관계를 가집니다.
- 상속(Inheritance)은 왜 사용할까요?
- 1.코드 중복을 제거하여 생산성을 높일 수 있습니다.
- 2.OOP의 다른 특징인 다형성을 표현할 수 있습니다.
- 다형성을 활용하여 상위클래스의 참조변수가 하위 클래스의 인스턴스를 가리킬 수 있습니다.
- 클래스 간의 관계를 상속관계로 할지, 포함관계로 할지 어떻게 판단하나요?
- 두 클래스가 '~는 ~다(IS-A)' 에 해당한다면 상속관계 입니다.
- 두 크랠스가 '~는 ~을 가지고 있다(HAS-A)'에 해당한다면 포함관계 입니다.
- 메소드 오버라이딩(Overriding)이란 무엇인가요?
- 메소드 오버라이딩이란 부모클래스에서 상속받은 메소드를 재정의하는 것을 말합니다.
- 메소드 오버라이딩(Overriding)하려면 어떤 조건을 만족해야 되나요?
- 1.오버라이딩이란 메소드의 동작만 재정의 하는 것이므로, 메소드의 선언부는 기존 메소드 선언부와 일치해야 합니다.
- 2.부모 클래스의 메소드에 있는 접근 제어자보다 더 좁은 범위로 변경할 수 없습니다.
- 3.부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없습니다.
- 메소드 오버라이딩(Overriding)은 왜 사용할까요?
- 자식 클래스에 적합하게 메소드 기능을 변경하고 싶을 때 사용합니다. 자주 사용하는 예는 Object#toStirng() 메소드를 오버라이딩하여 객체가 가지고 있는 필드 값을 확인 할 때 사용할 수 있습니다.
- 오버로딩과 오버라이딩을 설명해주세요.
- 오버로딩이란 한 클래스 안에 같은 이름을 가지는 메소드를 여러 개 정의하는 것을 말합니다.
- 오버라이딩은 상속받은 메소드를 하위 클래스에서 재정의하는 것을 말합니다.
- 좀 더 직관적으로 비교하자면 오버로딩은 새로운 메소드를 만드는 것(new)이고, 오버라이딩은 상속받은 메서드의 내용을 변경하는 것입니다.(modify)
- super와 super() 차이점을 설명해주세요
- super는 부모 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조변수입니다. 부모클래스의 멤버와 자식 클래스의 멤버 이름이 같은 경우 super를 사용하여 구별할 수 있습니다.
- super()는 부모클래스의 생성자를 호출할 때 사용합니다. 자식 클래스의 인스턴스를 생성하면 자식 클래스의 고유 멤버뿐만 아니라 부모 클래스의 멤버도 포함됩니다. 따라서 부모 클래스의 멤버를 초기화하기 위해 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출해야 합니다. 생성자의 첫 줄에 위치해야 합니다.
- Object 클래스르 제외한 모든 클래스의 생성자 첫 줄에는 무엇을 작성해야 되나요?
- this() 또는 super()을 작성해야 합니다. 만약 작성하지 않으면 컴파일러가 super()을 첫 줄에 삽입합니다.
- Object 클래스란 무엇인가요?
- 최상위 클래스입니다. 모든 클래스는 Object 클래스를 상속합니다. 그렇기에 만약 상속을 받지 않았다면 컴파일러가 자동적으로 extends Object를 삽입합니다. 이를 통해 Object 멤버들을 상속받습니다. (ex.toString(), equals(), hashCode()..)
- 캡슐화(Encapsulation)란 무엇인가요?
- 연관된 목적을 가지는 속성(필드)과 행위(메서드)를 하나로 묶어 , 실제 구현 내용 일부를 감추고 보호하는 것을 말합니다.
- 왜 캡슐화(Encapsulation)를 하나요?
- 1.데이터를 보호할 수 있습니다.
- 2.불 필요한 정보를 감출 수 있습니다.
- 캡슐화의 장점은 무엇인가요?
- 1.데이터 접근을 제한하므로 유지보수가 쉬워집니다.
- 2.코드를 쉽게 확장할 수 있습니다.
- 캡슐화를 하여 정보를 감추려면 어떻게 해야 되나요?
- 접근 제어자(Access Modifier)를 사용하여 정보의 접근 범위를 제한할 수 있습니다.
- 패키지(Package)란 무엇인가요?
- 패키지란 연관된 클래스와 인터페이스가 모인 디렉터리입니다.
- 특정 패키지에 속한다면 반드시 소스코드 첫 줄에 작성해야 됩니다.
- java.lang: 자바 기본 클래스들이 들어있는 패키지
- java.util: 자바 확장 클래스들이 들어있는 패키지
- 패키지의 장점은 무엇인가요?
- 클래스 이름이 같아도 다른 패키지에 들어있으면 구별할 수 있습니다. 이를 통해 협업에서 이름이 충돌하는 문제점을 해결할 수 있습니다.
- Import문은 무엇인가요?
- 다른 패키지에 있는 클래스를 편하게 사용하기 위해 사용합니다. 만약 Import 문을 사용하지 않으면 클래스를 사용하기 위해 앞에 패키지명을 모두 작성해야 합니다. 예를 들면 java.util.Arrays.sort()와 같이 모두 입력을 해주여야 합니다.
- java.lang은 컴파일러가 기본적으로 자동적으로 삽입해 줍니다.
- 패키지과 구문과 클래스 구문 사이에 작성합니다.
- 제어자(Modifier)란 무엇인가요?
- 클래스, 필드, 메소드, 생성자 등에 부가적인 의미를 부여해주는 것입니다. 접근 제어자와 기타 제어자 2가지가 있습니다.
- 접근 제어자(Access Modifier)는 왜 사용하나요?
- 정보 은닉(data hiding)을 하기 위해서 사용합니다. 사용자가 굳이 알 필요가 없는 정보나 보안이 중요한 데이터는 직접 접근을 막아야 합니다. 접근 제어자의 설정을 통해 클래스 외부에서 멤버에 직접 접근을 막을 수 있습니다.
- 접근 제어자 4가지를 설명해주세요
- 접근 제어자에는 1.private 2.default 3.protected 4.public이 있습니다.
- private: 클래스 안에서만 클래스 멤버에 직접 접근할 수 있습니다. 외부에서 private 멤버에 접근하려면 해당 객체의 public 메소드를 통해서만 접근할 수 있습니다.
- default: 클래스 안 + 같은 패키지(디렉토리) 안에서만 protected 멤버에 직접 접근할 수 있습니다.
- protected: 클래스안 + 같은 패키지 안 + 다른 패키지의 자식 클래스 안까지 default 멤버에 직접 접근할 수 있습니다. 참고로 접근 제어자를 작성하지 않으면 디폴트로 default 접근 제어자가 선택됩니다.
- public: 패키지와 클래스에 상관없이 어느 곳에서든 접근이 가능합니다.
- getter와 setter는 왜 필요할까요?
- 접근제어자가 private인 멤버변수에 간접적으로 접근하기 위해 필요합니다. getter는 가져올 수 있고, setter를 통해 값을 변경할 수 있습니다.
'Development > JAVA' 카테고리의 다른 글
[Java] parseInt vs ValueOf의 차이 (0) | 2022.05.31 |
---|---|
[Java] 다형성(polymorphism) (0) | 2022.05.16 |
[Java] 객체 지향 프로그래밍 질문들 (0) | 2022.05.11 |
[Java] 배열을 복사하는 방법 (0) | 2022.05.08 |
[Java] 오버라이딩이란 무엇이고 왜 사용할까? (0) | 2022.04.21 |
Comments