1. 캡슐화(Encapsulation)
: 개념
- 데이터와 행위를 하나로 묶고, 외부에 함부로 접근 못 하게 감추는 것이다.
: 클래스 내부의 필드(데이터)는 private, 접근은 public 메소드(getter/setter)로 한다!
- 비유
: 약(데이터)은 캡슐(클래스)로 싸서 먹잖아, 직접 내용물을 열면 위험하다..
-> "알아서 처리해주는 메서드"만 공개하고, 나머지는 감추는 것이다!!
- ex)
class Person{
private String name; // 직접 접근 금지!
// 안전하게 처리해서 저장한다.
public void setName(String name){
this.name = name;
}
// 읽기만 허용
public String getName(){
retrun name;
}
}
2. JVM 구조와 동작 원리
: 개념
- 자바 코드는 JVM(Java Virtual Machine) 위에서 실행 된다.
-> Java코드는 .java-> .class -> JVM이 실행
: JVM의 메모리 구조
- Stack : 지역 변수, 메서드 호출 정보!
- Heap : new로 만든 객체들이 저장된다.
- Method Area : 클래스 정보 저장한다.
- GC(Garbage Collector) : Heap에서 쓸모없는 객체 자동 삭제!
: 비유
- JVM은 공장이고, 코드는 설계도이며, 메모리는 공장 창고이다.
-> Stack = 작업 공간, Heap = 창고, GC = 창고 청소부!
3. equals() vs ==
: 개념
- == : 주소(참조)를 비교
- .equals() : 값 비교
: 비유
- ==은 주민등록번호 비교, .equals()는 이름 비교
-> 둘 다 "홍길동"이어도 주민번호가 다르면 == false
: ex)
String a = new String("hello");
String b = new String("hello");
sout(a==b); // false 주소가 다르다.
sout(a.equals(b)); // true 내용이 같다.
4. hashCode()와 equals()
: 개념
- 해시 자료구조(HashMap, HashSet 등) 사용 시 두 메서드 중요하다.
: .equals() 가 true면
: .hashCode() 도 같아야 같은 객체로 판단한다.
: 비유
- 집주소(hashCode)와 집주인 이름(equals)이 둘 다 같아야 같은 집이다.
: ex)
@Override
public boolean equals(Object o){
return this.name.equals(((Person)o).name);
}
@Override
public int hashCode(){
return name.hashCode();
}
: hashCode()
- HashMap, HashSet 같은 자료구조는 먼저 hashCode()로 빠르게 그룹화한다.
- 같은 그룹 내에서만 equals()로 비교한다.
: ex)
class User{
String name;
public User(String name){
this.name = name;
}
}
public static void main(String[] args){
HashSet<User> set = new HashSet<>();
set.add(new User("철수"));
set.add(new User("철수"));
sout(set.size()); // X가 출력된다.
}
-> 이유 : equals()와 hashCode()를 재정의하지 않았기 때문에! 그래서 재정의가 필요하다.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return this.name.equals(user.name); // 이름이 같으면 같은 객체로 판단
}
@Override
public int hashCode() {
return name.hashCode(); // 이름이 같으면 같은 해시코드
}
→ 이제 new User("철수") 두 개는 중복으로 간주되어 HashSet에서는 하나만 남음!
5. 멀티스레드(Thread)
: 개념
- 동시에 여러 작업을 처리할 수 있도록 하는 기술이다.
: 비유
- 라면 끓일 때 물 끓이면서 김치 꺼내는 것 = 두 일 동시에 처리
: 예시
class MyThread extends Thread{
public void run(){
sout("스레드 발생");
}
}
MyThread t = new MyThread();
t.start(); // run()이 비동기적으로 실행된다.
6. 람다식(Lambda) & 함수형 인터페이스
: 개념
- 간결한 함수 표현식 (Java 8부터 도입)
→ 익명 클래스 줄이기 + 코드 가독성 향상
: 비유
- 굳이 함수 이름 만들지 말고 "그냥 그 자리에서 함수 쓰자"는 느낌
: 예시
List<Integer> nums = Arrays.asList(1,2,3,4);
nums.stream().filter(n -> n % 2 == 0)
.forEach(n -> System.out.println(n));
: ex)
// 예전 방식 (익명 클래스)
new Thread(new Runnable() {
public void run() {
System.out.println("실행 중...");
}
}).start();
// 람다식
new Thread(() -> System.out.println("실행 중...")).start();
7. 객체지향 4대 원칙 요약 (면접 자주 나옴)
원칙 설명 비유
: 캡슐화 : 데이터 숨기기 : 약을 캡슐에 담아 외부 접근 제한
: 상속 : 코드 재사용 : 부모의 유전자를 자식이 물려받음
: 다형성 : 같은 메서드, 다른 동작 : "말하다()" → 사람은 한국말, 앵무새는 흉내
: 추상화 : 공통점만 뽑아내기 : 동물 → 먹는다, 잔다 등 핵심 동작만 정의
'JAVA 공부' 카테고리의 다른 글
| [프로그래머스 - Java] 중앙값 구하기 (0) | 2026.03.12 |
|---|---|
| [프로그래머스 - Java] 배열 뒤집기 (1) | 2025.03.10 |
| 02 - JAVA 기초&기본 개념 공부 (0) | 2025.03.10 |
| 01- JAVA 기초&기본 개념 공부 (0) | 2025.03.09 |
| 00-JAVA 기초&기본 개념 공부 (1) | 2025.03.09 |