개요
이번 포스팅에서 나오는 주요 키워드
- 함수 (Function)
- 클래스 (Class)
- 변수 (Variable)
- 메서드 (Method)
- 추상화 (Abstraction)
- 캡슐화 (Encapsulation)
- JVM (Java Virtual Machine)
- 컴파일 (Compile)
- 런타임 (Runtime)
- static 키워드 (Static Keyword)
- this 키워드 (This Keyword)
- call by value / call by reference
- 다형성 (Polymorphism)
- 상속 (Inheritance)
- 접근 제어자 (Access Modifier)
- 가비지 컬렉션 (Garbage Collection)
본문
Q1. 자바에서 함수가 무엇인지 설명하시오.
A1. 함수는
입력값을 받아서 출력값을 반환하는 기능을 수행하는 코드의 묶음
코드의 재사용성을 높이고, 코드의 가독성을 높이며, 유지보수를 쉽게 만들어준다.
메소드라고도 불리며, 클래스 내부에 선언되어 사용된다.
반환값이 없을 수도 있고, 여러 개의 입력값을 받을 수도 있다.
Q2. 클래스란 무엇인가요?
A2. 클래스는 객체를 생성하기 위한 설계도나 청사진입니다. 객체의 상태(속성)와 행위(기능)를 정의하는 틀로, 변수와 메서드로 구성됩니다.
Q3. 클래스에서 '변수'와 '메서드'는 각각 무엇을 의미하나요?
A3.
변수: 객체의 상태나 속성을 나타내며, 클래스 내에서 선언된 필드(Field)
예를 들어, 자동차 클래스의 변수로는 color, speed 등이 있을 수 있습니다.
메서드: 객체가 수행할 수 있는 동작이나 기능
예를 들어, 자동차 클래스에서 drive()나 stop() 같은 메서드가 있을 수 있습니다.
Q4. 추상화란 무엇인가요?
A4. 추상화는 필요한 정보만 남기고 불필요한 세부사항을 제거하는 과정이다, 이를 통해 현실 세계의 개념을 클래스 형태로 모델링한다.
예를 들어, 자동차라는 현실 개념에서 색상, 속도, 브랜드만 남기고 나머지 세부사항은 제외하는 것을 의미한다.
Q5. 클래스와 객체의 관계는 무엇인가요?
A5. 클래스는 설계도이고, 객체는 그 설계도를 기반으로 생성된 구체적인 인스턴스다.
예를 들어, Car라는 클래스가 있다면, Car myCar = new Car();로 생성된 myCar는 클래스의 객체다.
Q6. 클래스의 접근 제어자에 대해서 설명하고 이를 활용해서 어떤 전략을 세울 수 있을까요?
A6. 클래스의 접근 제어자는 클래스의 외부로부터의 접근을 제어하는 키워드, 클래스의 멤버 변수나 메서드에 대한 접근 범위를 설정할 수 있다.
이를 통해 캡슐화를 구현하고, 정보 은닉을 통해 객체의 무결성을 보호할 수 있다.
public: 어디서든 접근 가능
protected: 같은 패키지 내에서, 그리고 상속받은 클래스에서 접근 가능
default: 같은 패키지 내에서만 접근 가능
private: 같은 클래스 내에서만 접근 가능
Q7. 클래스가 적재되고, 실행되는 과정을 JVM 메모리 구조를 기반으로 순차적으로 설명해주세요.
A7. JVM 메모리 구조는 크게 Method Area, Heap, Stack, PC Register, Native Method Stack으로 구성된다.
클래스 파일 로딩 후 Method Area에 클래스 메타데이터가 저장되고, 객체 생성 시 Heap에 인스턴스가 생성되며, 메서드 호출 시 Stack에서 실행된다.
더 이상 사용되지 않는 객체는 GC에 의해 정리됩니다.
자세히 알아보기 ⬇️
2025.01.22 - [Java] - 예제로 배우는 결국 알아야하는 JVM 메모리 구조(순한맛)
Q8. 자바에서 위치별 변수 종류와 메모리 할당에 대해 설명해주세요.
A8. 인스턴스 변수는 Heap에, 클래스 변수는 Method Area에, 지역 변수와 매개변수는 Stack에 할당된다.
인스턴스 변수는 객체마다 별도로 생성되며, 클래스 변수는 모든 객체가 공유한다.
지역 변수와 매개변수는 메서드 실행 시에만 유효하다.
자세히 알아보기 ⬇️
2025.01.22 - [Java] - 예제로 배우는 제한자와 자바변수 설계 전략
Q9. 메서드의 정의와 필요성은? (DRY, WET 원칙 등)
A9. 메서드는 클래스 내에서 특정 기능을 수행하는 코드 블록입니다. 메서드를 사용하면 코드의 재사용성을 높이고, 가독성을 높일 수 있다.
DRY(Don't Repeat Yourself) 원칙: 중복 코드를 최소화하고, 코드의 일관성을 유지한다.
WET(Write Everything Twice) 원칙: 중복 코드를 피하고, 코드의 재사용성을 높인다.
Q10. 무조건 메서드를 만들어서 캡슐화를 진행하는게 좋은가요?
A10. 메서드를 만들어 캡슐화를 진행하는 것은 좋은 설계 방법입니다.
하지만, 과도한 메서드 분리는 오히려 가독성을 떨어뜨릴 수 있으므로 적절한 수준의 캡슐화를 유지하는 것이 중요합니다.
Q11. 메서드의 시그니처란 무엇인가요?
A11. 메서드의 시그니처는 메서드의 이름과 매개변수의 타입, 개수로 구성된다.
메서드 시그니처가 다르면 오버로딩으로 여겨집니다.
Q12. 메서드에서 Variable Arguments를 사용하는 방법과 이를 활용한 예시를 작성해주세요.
A12. Variable Arguments는 메서드의 매개변수로 가변 개수의 인자를 전달할 수 있도록 하는 기능입니다.
메서드 선언 시 타입 뒤에 ...을 붙여 사용합니다.
예: public void printNumbers(int... numbers) { }
Q13. call by value와 call by reference에 대해 알고 있나요?
A13. 자바는 기본적으로 Call by Value 방식을 사용합니다.
메서드 호출 시 매개변수로 값이 복사되어 전달되므로 원본 값은 변경되지 않습니다.
자세히 알아보기 ⬇️
2025.01.20 - [Java] - 예제로 배우는 자바 String Pool 이해하기
참조 타입을 사용하면 Call by Reference처럼 동작할 수 있습니다.
Q14. 기본형 변수와 참조형 변수에서 메서드 호출 시 각각 파라미터로 입력된 값이 어떻게 다르게 전달되는지 설명해주세요. (call by value)
A14. 기본형 변수는 값 자체가 복사되어 전달되므로 메서드 내에서 값을 변경해도 원본 값은 변하지 않습니다.
참조형 변수는 주소값이 복사되어 전달되므로 메서드 내에서 객체의 상태를 변경하면 원본 객체도 변경됩니다.
Q15. 객체를 생성하면 this. 라는 키워드가 생기는데, this. 키워드의 의미는 무엇인가요?
A15. this 키워드는 인스턴스 자신을 가리키는 참조 변수입니다.
인스턴스 변수와 지역 변수의 이름이 같을 때, this를 사용해 인스턴스 변수를 구분할 수 있습니다.
Q16. static 키워드의 의미와 사용하는 이유에 대해 설명해주세요.
A16. static 키워드는 클래스 변수와 메서드에 사용되며, 클래스가 로딩될 때 Method Area에 할당됩니다.
static 변수는 모든 객체가 공유하며, static 메서드는 인스턴스 생성 없이 호출할 수 있습니다.
Q17. 위 this, static 키워드의 특성을 고려하면, static 메서드에서 this 키워드를 사용할 수 있을까요?
A17. static 메서드는 인스턴스 생성 없이 호출되므로 this 키워드를 사용할 수 없습니다.
this는 인스턴스를 가리키는 참조 변수이므로, static 메서드에서는 사용할 수 없습니다.
자세히 알아보기 ⬇️
포스팅 예정
Q18. 자바 환경으로 작성된 코드에서 아무리 많은 수의 import가 있어도 컴파일 시간에 영향을 미치지 않는 이유는 무엇인가요?
A18. 자바 컴파일러는 import 문을 통해 클래스를 참조할 때, 해당 클래스의 전체 내용을 가져오는 것이 아니라, 단순히 클래스의 위치를 참조하는 역할을 합니다. 따라서 import 문의 수가 많아도 컴파일 시간에 영향을 미치지 않습니다.
Q19. 자바에서 import java.util.*; 과 import java.util.ArrayList; 의 차이점은 무엇인가요?
A19. import java.util.*;은 java.util 패키지 내의 모든 클래스를 참조하겠다는 의미이며,
import java.util.ArrayList;은 java.util 패키지 내의 ArrayList 클래스만 참조하겠다는 의미입니다.
Q20. 자바에서 import 문을 사용하는 이유는 무엇인가요?
A20. import 문을 사용하면 패키지 내의 클래스를 참조할 때 패키지명을 생략할 수 있습니다.
이를 통해 코드의 가독성을 높이고, 중복된 패키지명을 줄여 코드를 간결하게 작성할 수 있습니다.
Q21. 자바에서 import 문을 사용할 때 주의할 점은 무엇인가요?
A21.
1. 중복된 클래스명: 서로 다른 패키지에 같은 이름의 클래스가 있을 경우, 충돌이 발생할 수 있습니다.
2. 와일드카드 사용: 와일드카드(*)를 사용하면 모든 클래스를 참조할 수 있지만, 가독성이 떨어질 수 있습니다.
3. 불필요한 import: 사용하지 않는 클래스를 import하면 컴파일 시간이 늘어날 수 있습니다.
Q22. 자바에서 import 문을 사용하지 않고도 클래스를 참조할 수 있는 방법은 무엇인가요?
A22. 패키지명을 포함한 클래스의 전체 경로를 사용하여 클래스를 참조할 수 있습니다.
예를 들어, java.util.ArrayList를 사용할 때, import java.util.ArrayList; 대신
java.util.ArrayList list = new java.util.ArrayList();와 같이 패키지명을 포함하여 사용할 수 있습니다.
Q23. protected 를 사용하는 예시를 들어서 활용법을 알려주세요. (MSA)
A23. protected 접근 제어자는 같은 패키지 내에서는 접근 가능하며, 상속받은 클래스에서도 접근 가능합니다.
서비스 간 통신: 서비스 간의 통신을 위해 인터페이스를 제공하고, protected 메서드를 통해 구현을 숨길 수 있습니다.
상속 관계: 상속 관계에서 부모 클래스의 protected 메서드를 자식 클래스에서 오버라이딩하여 사용할 수 있습니다.
출처 & 추가로 알아보면 좋은것
- 자바에서의 객체지향 개념에 대한 이해
https://www.javatpoint.com/java-oops-concepts - JVM 메모리 구조
https://www.baeldung.com/jvm-memory-structure
추가로 알아보면 좋은 것
- 자바의 메모리 관리와 가비지 컬렉션 (Garbage Collection)
자바에서는 객체가 더 이상 사용되지 않으면 가비지 컬렉션에 의해 메모리가 자동으로 회수됩니다. 가비지 컬렉션의 동작 원리와 그 성능 최적화에 대해 알아보면 메모리 관리에 대한 이해가 쉬워집니다. - 자바 Stream API와 람다 (Lambda) 활용
자바 8부터 도입된 Stream API와 람다는 컬렉션 처리의 편리함을 제공하며 코드의 간결성 및 가독성을 높여줍니다. 이를 활용하여 코드를 어떻게 더 효율적으로 작성할 수 있는지 배울 필요가 있습니다. - 자바의 동시성 (Concurrency) 및 멀티스레딩 (Multithreading)
자바에서 멀티스레딩과 동시성 처리는 성능을 최적화하고 리소스를 효율적으로 활용하는 중요한 개념입니다. 스레드 간의 동기화, 병렬 처리 방법 등에 대해 알아보는 것이 유익합니다. - 디자인 패턴 (Design Patterns)
객체지향 설계를 잘 이해하고 적용할 수 있는 다양한 디자인 패턴을 배우면, 재사용 가능한 코드 작성이 가능합니다. Singleton, Factory, Observer 등 다양한 패턴에 대해 공부할 수 있습니다.
'Java' 카테고리의 다른 글
예제로 배우는 결국 알아야하는 JVM 메모리 구조(순한맛) (0) | 2025.01.22 |
---|---|
예제로 배우는 제한자와 자바변수 설계 전략 (1) | 2025.01.22 |
예제로 배우는 자바가 배열을 생성하는 원리 이해하기 (0) | 2025.01.21 |
Java 조각모음 [3] (0) | 2025.01.20 |
예제로 배우는 자바 String Pool 이해하기 (0) | 2025.01.20 |