본 글에서는 java와 관련된 용어들을 간단하게 정리해 두려고 한다.
세부적인 내용와 연관된 소스코드 등이 필요하다면 차후에 관련내용 포스팅 후 주석을 달아 두도록 하겠다.
Java
- 객체지향언어의 특징이 잘 적용된 언어
- Garbage Collector로 자동적인 메모리 관리가 가능
- JDK(Java Developement Kit) : 자바 프로그램 개발에 필요한 구성 요소
- JRE(Java Runtime Environment) : 자바 프로그램 실행에 필요한 구성 요소
- JVM(Java Virtual Machine) : 자바 가상 머신. 자바는 가상머신을 이용하여 작동하므로 플랫폼에 독립적인 장점이 있음. 어떤 운영체제라도 잘 작동한다.
객체와 클래스
객체(Object)
- 자신의 속성을 가지고 있고, 다른것들과 식별 가능한 것.
- 어떠한 사물이 가진 속성과 동작으로 설명할 수 있는 대상.
클래스(Class)
- 이러한 객체들을 유사한 특징을 지닌 것끼리 모아놓은 것을 클래스라고 한다.
- 객체를 정의하는 틀이며 속성(field)와 행위(Method)로 구성.
객체지향 프로그래밍 (Object-Oriented Programming, OOP) 특징
객체지향 프로그래밍이란?
- 데이터를 객체로 취급하는 것으로 절차지향 방식과는 다르게 객체의 상호작용을 통해 프로그램이 동작하는 것.
- 프로그래밍을 현실 세계의 시각으로 접근하는 방식.
대표적 특성 3가지
- 캡슐화 : 생성한 객체를 어떤 메소드와 필드로 어떻게 수행하는지를 외부에 숨기는 특성
- 다형성 : 클래스의 상속 관계를 이용하여 슈퍼 클래스가 같은 서브 클래스들이 동일한 요청을 다르게 처리할 수 있는 특징.
- 상속 : 슈퍼 클래스의 속성들을 서브 클래스에게 물려주는 것. (구체화하는것)
인스턴스
- 클래스에서 생성한 객체.
- 객체와 비슷한 의미로 사용한다. (인스턴스 : 클래스로 생성한 객체 / 객체 : 식별 가능한 무엇)
- 모든 인스턴스는 객체가 될 수 있지만 모든 객체를 인스턴스라고 할 수는 없다.
변수
- 다양한 정보를 저장할 수 있는 메모리를 참조하는 이름.
규칙
- 길이 제한 없음
- 문자 또는 언더바(_) 또는 달러 기호($)로 시작해야 한다.
- 자바의 연산자(+,-,*,/)는 변수이름에 넣을 수 없음.
- 대소문자 구분
- 첫글자에 숫자가 와서는 안되고, 빈칸이 들어가서도 안된다.
- 자바의 키워드는 변수이름으로 사용 불가 (ex class, public 등등)
접근 한정자
public : 모든 클래스에서 접근이 가능
protected : 동일 패키지에 속한 클래스 및 서브 클래스에서 접근이 가능.
default : 동일 패키지에 속한 클래스에서만 접근 허용. 기본값. 한정자를 쓰지 않는 경우
private : 현재 클래스에서만 접근이 가능.
static
- 클래스 메소드와 클래스 변수를 선언하는 데에 사용.
- 정적 영역에 할당하는 리소스를 선언하는데에 사용.
- 인스턴스를 생성하지 않고도 클래스의 메소드나 멤버에 접근할 수 있다.
final
- 더이상 변경할 수 없도록 선언하는 한정자. (상수처럼 취급)
- 클래스에 사용하면 서브클래스 사용불가, 메소드에 사용하면 오버라이딩 불가, 변수에 사용하면 변수값 변경불가.
abstract
- 추상 클래스를 선언하는데 사용하는 한정자.
메소드 오버로딩
- 메소드 이름은 동일하지만 다른 기능을 하는 메소드를 만드는 것.
조건
- 메소드 이름이 같아야 한다.
- 파라미터의 갯수 또는 자료형이 달라야 한다.
- 파라미터는 같고 리턴 변수의 자료형이 다르면 오버로딩이 성립되지 않는다.
메소드 오버라이딩
- 슈퍼클래스에서 정의한 메소드를 서브클래스에서 재정의하는것.
- 슈퍼클래스에서 정의한 어떤 메소드의 내용이 서브클래스에 적합하지 않거나 새롭게 변경할 내용이 있을 때 사용.
- 슈퍼클래스의 메소드는 은닉되고 서브클래스의 메소드가 활성화됨.
- super.메소드(); 로 은닉된 슈퍼클래스의 메소드를 호출할 수 있음.
조건
- 오버라이딩하는 메소드는 슈퍼클래스의 메소드와 메소드 구성 요소(이름, 파라미터, 리턴타입)가 모두 동일해야한다.
'Java > 개념정리' 카테고리의 다른 글
[Java] HashSet 에 대해 알아보자 (78) | 2023.10.30 |
---|---|
[Java] 배열 정렬하기 (Arrays.sort(), Collections.reverseOrder() 사용) (39) | 2023.10.30 |
[Java] 문자열 분리 (split, StringTokenizer 사용법) (88) | 2023.10.27 |
[Java] Scanner 와 BufferedReader 차이점 (0) | 2023.10.16 |