도도한 개발자
[Java] #18-1. 기본 문법 정리(1) 본문
* 객체지향 개발과 관련된 용어
· 클래스(Class)
· 상태(state)와 행위(behavior)
· 캡슐화(Encapsulation)
· 메시지(Message)
· 객체(Object)
· 상속(Inheritance)
· Overriding
다형성(Polymorphism)
· Overloading
** 클래스(Class)
"상태"와 "행위"를 갖는 자바의 기본 단위를 의미한다.
** 상태(state)와 행위(behavior)
"상태"는 클래스나 인스턴스 변수로, "행위"는 메소드로 표현할 수 있다.
** 캡슐화(Encapsulation)
관련된 "상태"와 "행위"를 결정하는 기능을 묶어 주는 것을 의미한다. 이렇게 묶어 주면 기능을 클래스 밖에서 접근 가능한 대상을 제한하는 정보 은닉(information hiding)이 가능하다. 그리고 하나의 객체를 위한 코드가. 다른 객체를 위한 코드와 무관하게 수행할 수 있는 모듈화(modularity)가 가능해진다.
public class EncapsulationEx {
private int state; // private로 선언함으로써 정보 은닉
public void setState(int newState) { // 상태 변경 가능
}
}
** 메시지(Message)
메소드에서 다른 메소드를 호출할 때 전달하는 값을 의미한다. 자바에서는 메소드를 호출할 때 넘겨주는 매개 변수들이 여기에 속한다. 위의 코드에서 newState가 메시지를 의미하는 매개 변수이다.
** 객체(Object)
클래스는 사물의 단위를 의미하지만, 객체는 각 사물을 의미한다.
** 상속
부모에 선언된 변수와 메소드에 대한 상속권을 갖는 것을 의미한다. 즉, 클래스 선언시 extends를 사용하여 확장하거나, implements를 사용하여 구현할 경우가 여기에 속한다.
** 다형성
자바에서는 부모 클래스에서 파생된 자식 클래스들의 기능이 다를 수 있다는 것을 의미한다.
** Overriding
부모 클래스에 선언되어 있는 메소드와 동일한 선언을 갖지만 구형이 다른 것을 의미한다.
public class Parent {
public void method() {
// 생략
}
}
이러한 부모 클래스가 있을 때
public class Child extends Parent {
public void method() {
// 생략
}
}
method()는 부모 클래스의 method()를 덮어 쓴 Overriding 처리가 된 것이다.
** Overloading
메소드의 이름은 동일해도, 매개 변수들을 다르게 하는 것을 의미한다.
* 자바의 주석문(comment)
주석은 개발하면서 부연 설명을 추가하거나, 개발해 놓은 코드를 임시로 수행하지 않도록 하려고 사용한다.
** 한 줄 주석 : 일반적으로 해당 줄을 실행하지 않도록 할 때 사용
// 주석 처리하는 내용
** 블록 주석 : 여러 줄을 실행하지 않도록 할 때 사용
/* 주석 시작
여기에 있는 문장들은 모두 무시됨
주석 끝 */
** javadoc을 위한 주석 : API 문서에 설명을 표시할 목적으로 사용
/** 주석 시작
여기에는 해당 클래스나 메소드의 설명이 있어야 함
주석 끝 */
* 패키지와 import
패키지는 클래스들을 그룹화하기 위한 단어이다. 만약 다른 패키지에 선언되어 있는 클래스를 사용하기 위해서는 클래스 선언 앞에 import 문장들이 있어야 한다.
º 패키지 선언시 유의사항
- 패키지는 package로 시작하며 하위 패키지로 내려갈 때마다 .을 찍어줘야 한다.
- 반드시 소스의 가장 첫 줄에 존재해야 한다.
- 패키지 이름에 자바 예약어가 포함되면 안 된다.
- 모두 소문자로 구성하는 것이 일반적이다.
- 일반적인 패키지는 java나 javax로 시작하면 안 된다.
- 패키지에 해당하는 폴더에 클래스가 존재하는 것이 일반적이다.
º 패키지 선언 예
package com.roadbook.godofjava;
º import는
- 다른 패키지에 있는 클래스를 사용하기 위한 문장이다.
- 다른 클래스에 static으로 선언되어 있는 접근 가능한 변수를 참조하려면 import static을 사용한다.
- 하나의 패키지 내에 있는 모든 클래스를 참조하려면 *을 사용한다.
º import 사용 예
import godofjava.chapter18.SummaryClass;
import static godofjava.chapter18.SummaryClass.SUMMARY_CHAPTER_NUMBER;
import godofjava.chapter18.exception.*;
* 자바에서 사용되는 타입의 종류
자바 타입은 크게 기본 자료형과 참조 자료형으로 나뉜다.
º 8개의 기본 자료형 : 숫자의 boolean(true, false)을 나타내기 위한 자료형을 의미하여, 우리가 마음대로 추가로 만들 수 없다.
- 정수형 : byte, short, int, long, char
- 소수형 : float, double
- 기타 : boolean
º 참조 자료형 : 기본 자료형을 제외한 모든 타입을 말한다. 모든 클래스는 참조 자료형이라고 생각하면 된다.
- 참조 자료형과 기본 자료형의 차이
· 초기화 할 때 : 기본 자료형은 값을 바로 지정하면 되지만, 참조 자료형은 일반적으로 new와 생성자를 지정하여
객체를 생성한다.
· 메소드를 호출할 때의 매개 변수 : 기본 자료형 및 참조 자료형 모두 값을 전달하지만, 참조 자료형 안에 있는
변수들은 참조 주소를 전달한다.
- 특수한 참조 자료현
· String : String 클래스는 new를 이용하여 객체를 생성할 필요가 없는 특수한 클래스다. 그리고 + 연산까지 가능한
유일한 클래스다.
* 변수의 종류
자바에서 사용되는 변수의 종류는 4가지다.
º 자바 변수의 종류
- 지역 변수(local variables) : 지역 변수를 선언한 곳에서부터 생명이 시작되고,
지역 변수를 선언한 중괄호가 끝나면 소멸
- 매개 변수(parameters) : 메소드가 호출될 때 생명이 시작되고,
메소드가 끝나면 소멸(호출한 메소드에서 넘겨준 참조 자료형은 그대로 살아 있음)
- 인스턴스 변수(instance variables) : 객체가 생성될 때 생명이 시작되고,
그 객체를 참조하고 있는 다른 객체가 없으면 소멸
- 클래스 변수(class variables) : 클래스가 생성될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸
º 예제를 통해 본 변수들
public class VariableTypes {
int instanceVariable;
static int classVariable;
public void method(int parameter) {
int localVariable;
}
}
* 계산을 쉽게 도와주는 연산자
º 연산자 종류
- 할당 연산자 : =
- 사칙 연산자 : +, -, *, /, %(여기서 +와 -는 더하기 빼기)
- 대입 연산자 : +=, -=, *=, /=, %=
- 단항 연산자 : +, -, ++, ==(여기서 +와 -는 양수와 음수를 나타내는 연산자)
- 비교 연산자 : ==, !=, >, <, >=, <=
- 조건적 논리 연산자 : &&, ||
- 논리 연산자 : !, &, |, ^
- 삼항 연산자 : ? :
- Bitwise 연산자 : &(AND), |(OR), ^(XOR), ~(NOT)
- Bit 이동 연산자 : <<, >>, >>>
- Bit 대입 연산자 : &=, |=, ^=, <<=, >>=, >>>=
º 연산자 연산 순위 (같은 레벨에 있는 연산자는 연산 우선 순위가 동일함)
레벨 | 연산자 | 한글 설명 | 영문 설명 | 결합 방향 |
1 | [] | 배열 요소 접근 | access array element | 좌 → 우 |
. | 객체 변수 접근 | access object member | ||
, | for 루프의 초기화시에만 | comma | ||
() | 메소드 호출 | invoke a method | ||
++ | x++로 사용할 경우 | post-increment | ||
-- | x--로 사용할 경우 | post-decrement | ||
2 | ++ | ++x로 사용할 경우 | pre-increment | 우 → 좌 |
-- | --x로 사용할 경우 | pre-decrement | ||
+ | +x | unary plus | ||
- | -x | unary minus | ||
! | logical NOT | |||
~ | bitwise NOT | |||
3 | ( ) | 형 변환시 소괄호 | cast | 우 → 좌 |
new | 객체 생성 | object creation | ||
4 | * / % | 배수 연산 | multiplicative | 좌 → 우 |
5 | + - | 증감 연산 | additive | 좌 → 우 |
+ | 문자열 더하기 | string concatenation | ||
6 | << >> >>> | Bit 이동 연산 | shift | 좌 → 우 |
7 | < <= > >= | 비교 연산 | relational | 좌 → 우 |
instanceof | 타입 비교 연산 | type comparison | ||
8 | == != | 비교 연산 | equality | 좌 → 우 |
9 | & | 비트 AND | bitwise AND | 좌 → 우 |
10 | ^ | 비트 XOR | bitwise XOR | 좌 → 우 |
11 | | | 비트 OR | bitwise OR | 좌 → 우 |
12 | && | 조건 논리 AND | conditional AND | 좌 → 우 |
13 | || | 조건 논리 OR | conditional OR | 좌 → 우 |
14 | ? : | 삼항 연산 | conditional | 우 → 좌 |
15 | = += -= *= /= %= &= ^= |= <<= >>= >>>= | 할당 연산 | assignment | 우 → 좌 |
그럼 이만.
'Backend > Java' 카테고리의 다른 글
[Java] #18-3. 중간 점검 및 실습 (0) | 2022.04.01 |
---|---|
[Java] #18-2. 기본 문법 정리(2) (0) | 2022.03.31 |
[Java] #17. Annotation (어노테이션) (0) | 2022.03.26 |
[Java] #16. Nested class, 내부 클래스 (0) | 2022.03.24 |
[Java] #15-4. String - 값을 바꾸는 메소드 (0) | 2022.03.23 |