1️⃣ 자료 구조 발전
단계설명특징
| 배열(Array) |
같은 타입 데이터 여러 개 저장 |
int[], double[] 등 |
| 구조체(Struct, C) |
여러 타입 데이터 묶음 |
int, char, double 등 혼합 가능 |
| 클래스(Class) |
구조체 + 메서드 + 접근제어 + 상속 |
객체지향 설계 가능, 재사용성 높음 |
2️⃣ 객체지향 핵심
개념설명예시
| 클래스(Class) |
설계도 |
자동차 설계도 |
| 객체(Object, 인스턴스) |
설계도로 만든 실체 |
실제 자동차 |
| 재사용 & 반복 |
반복되는 구조/기능 → 객체 생성 |
여러 학생 객체, 여러 자동차 객체 |
객체 관계
관계의미예시
| is-a |
“~은 ~이다” → 상속 |
학생 is a 사람 |
| has-a |
“~을 가지고 있다” → 포함 |
자동차 has a 엔진 |
3️⃣ 접근 제어자
구분같은 클래스같은 패키지상속 클래스전체
| private |
✅ |
❌ |
❌ |
❌ |
| default |
✅ |
✅ |
❌ |
❌ |
| protected |
✅ |
✅ |
✅ |
❌ |
| public |
✅ |
✅ |
✅ |
✅ |
- 팝업같이 어디서나 쓰는 클래스 → public
- 내부용 변수 → private
4️⃣ 정적(static) vs 동적(인스턴스)
구분기준생성 시점키워드예시사용 상황
| 정적(static) |
클래스 |
프로그램 시작 시 |
static |
static int count; |
공용 데이터, 유틸 메서드, 상수 |
| 동적(인스턴스) |
객체 |
new로 객체 생성 시 |
❌ |
int age; |
객체별 고유 데이터, 상태 |
// 정적 변수 class Cat { static int count = 0; Cat() { count++; } } // 동적 변수 class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } }
5️⃣ 메모리 & 참조
개념설명
| static |
클래스 전체에서 공유, 항상 메모리에 존재 |
| final |
값 변경 불가 |
| 참조(Reference) |
객체 주소 전달 → call by reference |
| 원시형(Primitive) |
값 자체 저장 (int, double) |
| 참조형(Reference) |
주소 저장 (Student s = new Student();) |
6️⃣ 2차원 배열 & 좌표
절대 좌표 (Absolute Coordinates)
X\Y01234
| 0 |
(0,0) |
(0,1) |
(0,2) |
(0,3) |
(0,4) |
| 1 |
(1,0) |
(1,1) |
(1,2) |
(1,3) |
(1,4) |
| 2 |
(2,0) |
(2,1) |
(2,2) |
(2,3) |
(2,4) |
| 3 |
(3,0) |
(3,1) |
(3,2) |
(3,3) |
(3,4) |
| 4 |
(4,0) |
(4,1) |
(4,2) |
(4,3) |
(4,4) |
상대 좌표 (Relative Coordinates)
상대 좌표 (dx, dy) Y -1 0 1 X -1 ↖ ↑ ↗ 0 ← • → 1 ↙ ↓ ↘
- • = 현재 위치 (0,0)
- (dx, dy) = 상대 이동 좌표
- 코드 예시:
int[] dx = {-1, 0, 1, 0}; // 상, 우, 하, 좌 int[] dy = {0, 1, 0, -1}; for(int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; }
7️⃣ 기타 개념
개념설명예시
| 인터페이스(interface) |
필드 없음, 메서드 선언만 |
운송 인터페이스: 배, 트럭이 공통 메서드 사용 |
| 싱글톤(Singleton) |
객체 단 하나만 유지 |
인증서, 설정 |
| 도트 연산자(.) |
“~의” 관계 |
System.out.println |
| 패키지(package) |
클래스 묶음 |
default, custom 패키지 |
8️⃣ 전체 키워드 정리
- 자료 구조: 배열 → 구조체 → 클래스
- 객체지향 핵심: 클래스/객체, is-a / has-a
- 접근제어: private, default, protected, public
- 메모리: static, final, heap, reference
- static vs non-static: 공용 vs 객체별
- 2차원 배열: 절대좌표 / 상대좌표
- 참조: 주소값 공유 → call by reference