1. 자료형
- 자료형
| 자료형 | ||
| 문자 | char | |
| 숫자 | 정수형 | byte, short, int, long |
| 실수형 | float, double | |
| 논리 | boolean | |
- 변수/상수
- 변수(variable) : 한 번 데이터 넣고 다음에 바꿀 수 있는 저장소
- 상수(constant) : 한번 데이터를 넣고 다음에 바꿀 수 없는 저장소
- 형 변환(Casting)
- 자동 형변환(Implicit Casting) : 작은 데이터 타입 -> 큰 데이터 타입 변환될 때 자동으로 이루어짐. *데이터 손실 발생 X
- ex)int -> double
- 강제 형변환(Explicit Casting) : 큰 데이터 타입 -> 작은 데이터 타입으로 변환할 때 사용 *데이터 손실이 발생할 수 있기 때문에 명시적으로 반환해야함. '명시적 형변환'이라고도 함.
- ex)double -> int
- 자동 형변환(Implicit Casting) : 작은 데이터 타입 -> 큰 데이터 타입 변환될 때 자동으로 이루어짐. *데이터 손실 발생 X
short a =10;
short b =15;
//산술 연산을 위한 기본 자료형 => int 이상
short sum = a + b //에러발생
int sum2 = a + b //정상작동
int sum = (short)(a + b);//강제형 변환
- 연산자
| 산술 연산자 | + - * / % | |
| "1"+"1" : 문자열 연결 1 + 1 : 산술 연산 |
||
| 대입 연산자 | 할당 연산 | = |
| 복합 대입연산자 | 산술 연산자 + 대입 연산자 예시 ) a = a + 10 |
|
| 증감 연산자 | 전위 | ++a |
| 후위 | a++ | |
| 비교 연산자 | >, <, >=, <=, ==, =! (결과값 : true, false) | |
| 논리합 연산자(이항 연산자) | && : 둘 중 모두가 참이면 참 (true && true => true) || : 둘 중 하나가 참이면 참(예시, ture||flase => true) |
|
| 삼항 연산자 | a ? True : False ex)int a = 10 a =10 ? 100 : 150 |
|
| 비트 연산자 | &, |, ^, <<, >> | |
2. 제어
- 조건에 의한 분기
- if
- switch
- 삼항 연산자
- 조건에 의한 반복
- for
- while
- do - while
- 기타
- continue
- break
- 중첩효과
- 프로그램 흐름
- 제어
- 알고리즘
- 기본자료형
- 참조 자료형
- 참조(객체)변수
- 배열
- 객체
스택(Stack) : 메서드 호출 시 지역변수나 참조 변수를 저장하는 고정된 크기의 메모리 영역. LIFO 방식으로 할당 및 해제.
힙(Heap) : 동적으로 생성된 객체나 배열이 저장되는 메모리 영역. 크기가 유연하며, 가비지 컬렉터에 의해 자동관리.
+)참조 변수는 스택 객체는 힙에 저장되는 방식을 상호작용함.
| 스택 | 힙 | |
| 역할 | 메서드 호출 시 생성되는지역변수, 참조변수 저장 | 동적으로 생성된 객체, 배열 저장 |
| 메모리 관리 방식 | LIFO 방식 | new로 할당, 가비지 컬렉터가 관리 |
| 저장되는 데이터 | 기본자료형 변수, 참조변수 | 객체, 배열(동적 할당된 데이터) |
| 메모리 해제 | 메서드가 종료되면 자동으로 해제 | 가비지 컬렉터에 의해 사용되지 않는 객체 해제 |
| 속도 | 매우 빠름 | 상대적으로 느림 |
| 메모리 크기 | 작음 | 큼 |
| 접근 범위 | 메서드 스코프 내에서만 접근가능 | 프로그램 내 전역적으로 접근 가능 |
3.객체 문법
- 순차적 / 비구조적 프로그래밍 : 하나의 함수나 코드 몸체에 연속된 코드를 작성하는 프로그래밍 패러다임
- 절차적 / 구조적 프로그래밍 : 흐름을 어지럽히는 흐름제어를 사용하지 않음으로 써 가독성을 높임.
[오버로딩]
하나의 클래스 안에서 사용되는 모든 식별자는 이름이 중복되면 안됨.
오버로딩 메소드 및 생성자를 작성하기 위한 규칙
- 메소드 및 생성자 이름이 같아야함.
- 인자 리스트는 반드시 달라야함(인자 개수, 인자 타입, 인자 순서)
- 리턴타입은 달라도 무관
[static]
객체는 클래스에서 생성, 클래스 하나엥서 무한대로 객체를 생성할 수 있고 그러한 객체는 모야은 동일할지 모르지만, 전혀 다른 덩어리이다.
하지만 static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 다른 존재임.
[this]
객체 자신을 가르키는 레퍼런스 변수
[생성자]
인스턴스 변수를 초기화하는 역할
리턴 타입이 없고 반드시 클래스 명으로 생성자 이름을 지정함.
객체
- 이종 기본자료형 모여 새로운 자료형
- *새로운 자료형의 필요
- 공통 정의 객체 ➡️ class
- 속성 -> 멤버필드. /변수. (인스턴스 / 클래스)
- 기능 -> 메서드 /함수 (인스턴스 / 클래스)
- ➡️인스턴스화(변수화) ➡️(객체, 참조)변수 👉 new와 .(dot) 사용
- ➡️추상화
- ➡️UML - diagram
- 클래스 선언 : class 클래스명
- 이름 규칙 : 대문자로 시작
- 멤버 필드 선언
- 인스턴스 : 자료형 변수명
- 클래스 : static 자료형 변수명
- 이름 규칙 : 소문자(명사)로 시작
- 메서드 선언
- 인스턴스
- 클래스 : static
- 이름 규칙 - 소문자(동사)로 시작
- 오버로딩(중복 정의) : 같은 메서드 명을 선언(아규먼트가 다름)
- 가변인자 (Varargs)

this()
- 같은 클래스의 다른 생성자를 호출할 때 사용되며, 코드 중복을 줄이고 생성자 간의 공통로직을 관리하는 데 유용함.
- 생성자 내부에서만 사용 가능
- <주의 사항>
- 첫 번째 문장 : 생성자 내에서 반드시 첫번째 문장으로 사용되어야 함. ->컴파일 에러가 발생할 수도 있음.
- 자기 호출 불가 : 자기 자신을 호출하거나, 순환 참조를 만들 수 없음.
[식별자 규칙 정리]
- 자바 클래스명 규칙:
-클래스명은 대문자로 시작: 자바 클래스의 이름은 반드시 대문자로 시작
예: Person, Employee, Car
-파스칼케이스 사용: 클래스명에 두 개 이상의 단어가 포함될 때는 단어의 첫 글자를 대문자로 표기하는 파스칼케이스(PascalCase) 방식으로 작성.
예: StudentRecord, BankAccount, CustomerInfo
-예약어 사용 금지: 자바의 예약어(Reserved Keywords)는 클래스 이름으로 사용할 수 없음. 예를 들어, class, int, public 같은 단어는 사용할 수 없음.
-특수문자 사용 금지: 숫자나 언더스코어(_) 외에 특수문자는 클래스명에 사용할 수 없음.
예: MyClass_1 (허용됨), My-Class (허용되지 않음)
-숫자는 첫 글자에 사용 금지
-클래스명은 의미 있게: 클래스 이름은 클래스가 나타내는 개념이나 역할을 명확하게 설명할 수 있도록 의미 있는 이름으로 지어야 함.
-파일명과 클래스명 일치 - 상수명 규칙 :
-대문자 사용: 상수(constant)는 모두 대문자로 작성하며, 각 단어는 언더스코어(_)로 구분
예: MAX_SPEED, PI, DEFAULT_TIMEOUT
-의미 있는 이름: 상수는 고정된 값이나 불변의 의미를 전달해야 하므로, 이름이 명확하고 구체적이어야 함.
예: MAX_USERS, MIN_AGE_LIMIT - 메소드명 규칙 :
-카멜케이스 사용: 메소드명은 소문자로 시작하며, 여러 단어가 결합될 때는 카멜케이스를 사용
예: calculateTotal, getUserName, setAge
-동사로 시작
-의미 있는 이름: 메소드명은 메소드가 하는 일을 명확히 나타내야 함.
-오버로딩 : 같은 메서드명을 선언하고, 매개변수가 달라야 함.
[변수의 사용 영역(scope)]
- 클래스 변수 (Class Variable)
- `static` 키워드로 선언된 변수.
- 클래스가 메모리에 로드될 때 생성되며, 모든 인스턴스가 공유.
- 클래스 이름으로 직접 접근 가능하며, 접근 제한자에 따라 외부 접근 가능 여부가 달라짐. - 인스턴스 변수 (Instance Variable)
- 클래스 내에서 선언되지만 `static` 키워드가 없는 변수.
- 각 인스턴스마다 독립적으로 생성되며, 인스턴스가 있어야 접근 가능. - 지역 변수 (Local Variable)
- 메소드나 블록 내에서 선언된 변수.
- 해당 메소드나 블록 내에서만 사용 가능하며, 메소드가 종료되면 사라짐. - 매개변수 (Parameter Variable)
- 메소드에 전달된 인자를 받는 변수.
- 해당 메소드 내에서만 사용 가능. - 블록 내 변수 (Block Variable)
- 제어문(if, for, while 등) 안에서 선언된 변수.
- 해당 블록 내에서만 유효하며, 블록이 끝나면 사라짐.
[상속과 오버라이딩 개념 정리]
- 상속(Inheritance)
- 상속은 자바에서 기존 클래스(부모)의 기능을 새로운 클래스(자식)가 물려받아 사용할 수 있게 하는 기능.
- 상속을 통해 코드의 재사용성을 높이고, 유지보수성을 향상시킬 수 있음.
class 부모클래스 {
// 부모 클래스 멤버(필드, 메소드 등)
}
class 자식클래스 extends 부모클래스 {
// 자식 클래스 멤버(필드, 메소드 등)
}
부모클래스 : 공통적인 속성이나 동작을 정의한 클래스
자식 클래스 : 부모 클래스를 상속받아, 부모 클래스의 속성과 동작을 물려받음.
- 오버라이딩(Overriding)
- 오버라이딩은 자식 클래스가 부모클래스를 재정의하는 기능
- 부모 클래스에서 제공한 메소드를 자식 클래스에서 다시 구현하여, 자식 클래스에 맞는 동작을 수행
- <기본 문법>
- 부모클래스의 메소드 이름, 반환타입, 매개변수가 동일해야 함.
- 오버라이딩된 메소드는 자식 클래스에서 부모 클래스의 메소드를 덮어씀.
@Override // 오버라이딩임을 명시 (선택사항)
public void 메소드이름() {
// 재정의된 메소드 내용
}
- 'super' 키워드
- 부모클래스의 멤버에 접근하기 위해 사용되는 특별한 키워드
- super() 생략 가능 : 자식 클래스에서 생성자를 정의할 때 부모 클래스의 기본생성자를 호출하는 super()는 생략 가능. 그러나 부모클래스에 기본 생성자가 없거나, 매개변수가 있는 생성자를 호출해야 하는 경우에는 반드시 명시적으로 super()를 사용해야함.
<this와 super의 차이점>
| 키워드 | |
| this | 같은 클래스의 필드나 메소드를 참조할 때 사용 |
| super | 부모 클래스의 필드나 메소드를 참조할 때 사용 |
| this() | 같은 클래스의 다른 생성자를 호출할 때 사용 |
| super() | 부모 클래스의 생성자를 호출할 때 사용 |
- final
- 변수를 선언 ➡️ 변수는 한번만 값을 할당할 수 있음. 한 번 값이 할당되면 변경 불가능.
- final 변수
- 값을 한번만 할당할 수 있는 상수를 선언할때 사용
- 기본 타입의 경우 값 변경 불가능
- 참조 타입의 경우 참조하는 객체 변경 불가능, 객체의 내부 상태는 변경 가능
- final 메서드
- 오버라이딩 ❌
- 하위 클래스에서 해당 메서드를 재정의 ❌
- final 클래스
- 상속❌
- 다른 클래스가 이 클래스를 확장❌
- 상수 static final
- 클래스 상수를 정의할 때 사용
public static final int MAX_VALUE = 100; // 클래스 상수
[접근 제어자의 종류와 특징]
| 접근 제어자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | 전체 접근(외부) |
| private | O | X | X | X |
| (기본) | O | O | X | X |
| protected | O | O | O | X |
| public | O | O | O | O |
- ⭐️private
- 클래스 내부에서만 접근 가능. 다른 클래스나 외부에서 접근할 수 없음.
- 주로 캡슐화의 핵심으로, 필드나 메소드를 외부에서 감추고 내부에서만 사용하도록 할 때 사용함.
- ⭐️public :
- 어디서든지 접근이 가능함.
- 클래스나 메소드가 공용 API로 사용될 때 주로 사용함.
캡슐화(Encapsulation)
캡슐화는 객체지향프로그래밍의 핵심 개념 중 하나, 데이터와 메소드를 하나의 단위(클래스)로 묶고, 데이터를 보호하는 것을 의미함.
캡슐화를 통해 클래스의 내부 상태는 외부에서 직접 접근하지 못하게 감추고, 오직 필요한 메소드를 통해서만 접근하도록 제한함.
=> 객체의 일관성을 유지하고, 불필요한 데이터 노출을 방지 할 수 있음.
<주요 목표>
- 내부 구현 감추기
- 데이터 보호 : 외부에서 데이터 수정 ❌ -> 객체의 상태를 안전하게 보호하고 유지
- 유효성 검증 : 메소드를 통해 데이털르 수정할 때, 필요한 유효성 검증을 추가할 수 있어, 데이터의 무결성을 유지할 수 있음.
<구현 방법>
- private 필드
- Getter와 Setter 메소드 : 데이터를 외부에서 접근하거나 수정할 때는 get과 set 메소드를 사용하며, 이를 통해 간접적으로 객체의 상태를 제어함.
- Getter
- private 필드에 저장된 데이터를 외부에서 조회할 수 있도록 하는 public 메소드
- 필드를 직접 노출하지 않고, 안전하게 데이터에 접근할 수 있는 방법을 제공함.
- Setter
- private 필드의 값을 변경할 수 있도록 하는 public 메소드
- 필드를 직접 수정하는 대신, 메소드를 통해 간접적으로 값을 설정하며, 유효성 검사를 추가하여 잘못된 값이 입력되지 않도록 함.
- Getter
'Backend > Java' 카테고리의 다른 글
| [java] System/Data/Calendar/Random/Array 클래스 (0) | 2024.10.22 |
|---|---|
| [java]java.lang 패키지 (0) | 2024.10.21 |
| [java]상속/은닉/다형성/추상클래스/interface (1) | 2024.10.18 |
| 김영한 실전 자바 기본편 - 2.기본형과 참조형 (0) | 2024.05.13 |
| 김영한의 실전 자바 기본 - 1. 클래스와 데이터 (0) | 2024.05.08 |