객체지향 프로그래밍이란?
- 현실세계에 존재하는 사물을 모델링하여 클래스 자료형 작성 후 객체(Object)를 생성한 후 객체를 이용해 프로그램을 작성하는 방법
- 이 객체지향(OOP)은 클래스 배포가 가능하다.
- 즉, 프로그램 생성성 증가와 유지보수의 용이성이 증가한다.
객체지향 프로그래밍의 특성에는 추상화, 캡슐화, 다형성, 상속성이 있다.
여기서 추상화(Abstraction)란?
- 현실세계에 존재하는 사물을 속성(값:Field)과 기능(행위:Method)으로 구분하여 클래스로 만들어 주는 방법이다. 즉, 사물을 모델링한다는 뜻
- 클래스 → 객체 → 메소드 호출
- 필드는 속성(Property)이라고 하기도 한다.
클래스(Class) - 참조형(Reference Type)
- 인스턴스를 만들기 위한 자료형
- 필드(Field)와 메소드(Method)의 모임
★ 클래스 선언 방법 ★
public class 클래스명 {
필드(Field); //메소드에서 필요로 하는 정보를 제공할 목적의 변수 : 변수선언
...
생성자(Constructor); //인스턴스 생성을 목적으로 하는 메소드
...
메소드(Method); //기능을 제공할 목적의 명령들의 모임
...
}
★ 인스턴스 생성 방법 ★
클래스명 참조변수 = new 클래스명();
- 객체 정보를 저장하기 위한 참조변수 선언
- new 연산자로 생성자 호출하여 객체 생성
★ 인스턴스 사용 방법 ★
- 참조변수에 저장된 인스턴스 정보로 필드 또는 메소드 접근 : . 연산자 이용
- 형식) 인스턴스정보.필드 or 인스턴스정보.메소드
메소드(Method)
- 필드에 저장된 정보를 제어하기 위한 명령들의 모임 → 기능
★ 메소드 선언 방법 ★
자료형 메소드명(자료형 변수명, 자료형 변수명,...) { 명령; ... }
- 자료형(반환형)에는 void,int,double 등이 있다.
- 메소드 반환형(ReturnType) - 결과형(ResultType) : 메소드를 호출하여 얻을 수 있는 결과의 자료형
- 입출력은 안되며 출력 대신 반환을 한다.
- void (무반환형) : 메소드를 호출하여 얻을 수 있는 결과가 없을 경우 사용하는 자료형
- 메소드 매개변수(Parameter) = 인자(Argument)
- 메소드의 명령을 실행하기 위해 필요한 정보를 전달받아 저장하기 위한 변수
★ 메소드 호출(Method Invoke) 방법 ★
- 메소드를 호출해야 메소드에 작성된 명령들이 실행되어 기능 제공
- 형식) 인스턴스.메소드명(필요정보, 필요정보,...);
- ※ 매개변수에 정보를 제대로 전달하지 않으면 메소드 호출 불가
- ※ 매개변수와 식별자를 하나의 메소드로 인식
★ return : 메소드를 종료하는 명령 (제어문)
⑴ if(조건식) return;
: 조건식의 결과가 참인 경우 메소드 종료
⑵ return 대상;
: 대상정보를 메소드 호출 명령으로 반환
※ 대상의 자료형과 메소드 반환형의 자료형은 반드시 동일
캡슐화(Encapsulation)
- 추상화 작업을 통해 작성된 클래스를 보다 견고하게 작성
- 필드의 직접적인 접근을 제한하고 메소드를 이용하여 접근하도록 프로그램 작성하는 방법
- 인스턴스가 필드에 직접 접근하여 사용될 경우 잘못된 정보 저장 가능
- 정보 은닉화(Information Hiding) : 인스턴스가 필드에 직접 접근하는 것을 제한
★ 접근지정자(Access Modifier) ★
- 인스턴스가 필드에 접근할 수 없도록 private이라는 접근지정자(Access Modifier)를 이용하여 선언
- private : 클래스 내부에서 접근 가능하여 클래스 외부에서 접근 불가능하도록 설정하는 키워드
- 필드 선언 시 사용하여 은닉화 처리
- public : 모든 패키지의 클래스에 서 접근 가능하도록 설정하는 키워드
- 메소드 선언 시 사용하여 접근 처리
※ 은닉화 선언된 필드에는 필드 값 반환 또는 필드값 변경 목적의 메소드 선언
- Getter 메소드 : 필드값 반환 목적의 메소드
public 자료형 get필드명() {
return 필드명; //필드값 제공
}
※ 필드 자료형이 boolean인 경우 메소드명은 "is필드명"으로 선언
- Setter 메소드 : 필드 값 반환 목적의 메소드
public void set필드명(자료형 파라메터명) { //파라메터값에 대한 유효성 검사
필드명=파라메터명;//파라메터값으로 필드값을 변경
}
→ 메소드는 모든 클래스에서 접근 가능하도록 public 접근 지정자를 이용하여 선언
- 식별자 변경 : Refactor >> Rename (Alt+Shift+R)
- → 빌드된 클래스의 모든 식별자가 동시에 변경
- 이클립스에서는 Getter와 Setter 메소드를 자동으로 생성하는 기능 제공
- → Alt+Shift+S >> R >> 필드 선택 >> Generate(OK)
메소드 오버로드(Method Overload)
- 클래스에 동일한 이름의 메소드를 선언할 수 있는 방법
- 동일한 기능을 제공하는 메소드는 같은 이름의 메소드명으로 선언하는 것을 권장
★ 오버로드 작성 규칙 ★
- 클래스에서 동일한 메소드명으로 선언하며 메소드 파라미터의 개수, 자료형 등을 다르게 선언
- 메소드의 접근 지정자, 반환형은 오버로드와 무관
- 다형성 : 동일한 이름의 메소드를 호출해도 상태에 따라서 다른 메소드가 호출되어 기능 제공
→ 파라미터(매개변수)에 전달되는 값에 따라서 다른 메소드가 호출되서 실행
→ 메소드 오버로드, 메소드 오버라이드
→ 파라미터에 전달되는 값에 따라 다른 메소드 호출
생성자(Constructor)
- 인스턴스를 생성을 목적으로 선언하는 특별한 메소드
- 기능 제공이 목적이 아니며, 인스턴스로 호출 불가능
- 생성자를 선언하지 않아도 내부적으로 기본 생성자가 있는 것으로 처리
- 생성자를 선언하지 않아도 기본 생성자로 인스턴스 생성 가능
- ※ 기본 생성자(Default Constructor) : 파라메터와 명령이 없는 생성자 (초기화 작업 미구현)
- 선언하지 않을 경우 클래스의 상속성에 문제가 발생하므로 반드시 선언
★생성자를 선언하는 이유★
- 인스턴스 생성 시 초기값을 전달하여 필드에 저장하기 위해 선언
- 인스턴스 생성 후 필요한 초기화 작업을 위해 선언 - GUI 프로그램의 디자인 작업
- 생성자 인스턴스를 만들 때 자동 호출 → 인위적 호출 불가
★생성자 작성 방법★
- 생성자명은 반드시 클래스명과 동일하게 선언하며 반환형을 미선언 → 값 반환 불가능
- 메소드 오버로드 기능에 의해 여러 개의 생성자 선언 가능
public 클래스명() {
//Ctrl+Space >> Constructor 선택 >> Enter
//기본 생성자는 명령 미작성
}
public 클래스명(파라메터,...) {
//Alt+Shift+S >> O >> 필드 선택 >> Generate
//인스턴스가 생성될때 실행될 명령 작성 - 필드 초기화
}
※ 생성자를 하나라도 선언하면 기본적으로 제공하는 기본 생성자는 소멸되므로 기본 생성자를 반드시 선언하는 것을 권장 (상속 문제 때문)
this 키워드
- 메소드에서 클래스 자신의 인스턴스 정보를 저장하여 사용하기 위한 키워드
- 메소드의 파라미터에 숨겨져 클래스의 인스턴스를 저장하는 참조 변수
- 메소드를 호출한 인스턴스 정보를 자동으로 전달되어 저장
[this.필드]
- 어떤 인스턴스의 필드 값인지 구분 가능
- 메소드 안에서 인스턴스의 것을 표현하기 위해서 사용
this 참조 변수가 존재해야 되는 이유?
클래스를 이용하여 인스턴스를 생성할 경우 필드는 인스턴스마다 메모리에 따로 생성되지만 메소드는 클래스에 하나만 존재 → 메모리 절약
this 키워드를 생략하여 표현하지 않아도 자동으로 인식하지만 사용해야 하는 특별한 경우
⑴ 이름이 똑같은 경우에 사용(메소드의 매개변수, 필드의 이름)
public class Test {
private int su;
public void setSu(int su) {
this.su=su;
}
}
⑵ 생성자가 생성자를 호출할 경우 사용 (초기화 작업)
- 생성자의 초기화 코드가 중복될 경우 코드 중복 최소화를 위해 사용
⑶ 메소드에서 호출한 인스턴스를 표현하기 위해서 사용 (이벤트 처리, 다중 스레드)
static 키워드
- 인스턴스에 독립적인 필드 또는 메소드를 선언하기 위한 키워드
- static 변수 = 클래스 변수 = 정적 포트
1. static 필드 (정적 필드)
- 모든 인스턴스가 공유하여 사용하는 필드
- 클래스가 메모리에 저장되면 하나만 생성되는 필드
- 인스턴스 생성과 무관 (생성자 초기화 작업 불필요)
★static 필드 선언 방법★
접근 지정자 static 자료형 필드명 = 초기값;
→ 초기값이 생략될 경우 필드 기본값 저장
★static 필드 접근 방법★
클래스를 이용하여 필드 접근
형식) 클래스명.필드
→ 필드가 private 접근 지정자로 선언된 경우 접근 불가능
★static 필드 사용 이유★
메모리 절약과 데이타 변경 및 사용의 용이성
2. static 메소드 (정적 메소드)
- this 참조변수가 존재하지 않는 메소드
- 인스턴스 필드 또는 인스턴스 메소드 접근 불가능 (인스턴스 메소드 호출 불가능)
- static 필드 또는 static 메소드 접근 가능 (클래스를 이용하여 접근하여 사용)
★static 메소드 선언 방법★
접근지정자 static 반환형 메소드명(매개변수,... ) {
static 필드값 제어 명령;
}
★static 메소드 호출 방법★
클래스를 이용하여 메소드 호출
형식) 클래스명.메소드명(값,...);
static 메소드를 사용 이유는?? 메서드 호출이 간편하기 때문에
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 객체지향 프로그래밍에 대한 이해 (2) (0) | 2020.12.20 |
---|---|
웹 서버 :: 이클립스 WAS 설치(Apache Tomcat) 및 사용방법 (0) | 2020.12.17 |
신입 개발자 기술면접 준비하기 (2) - Java (0) | 2020.12.16 |
신입 개발자 기술면접 준비하기 (1) - Java (0) | 2020.12.16 |
이클립스(eclipse) 다운로드 및 실행 (0) | 2020.09.26 |