객체지향 프로그래밍
: 유지보수를 용이하게 만드는 기법 → 단점: 실행속도 늦음(→ 보완: POJO(Spring))
***객체지향 자체에 너무 얽매이지 말고 프로그램의 완성에 초점을 둘 것
***객체지향 3대요소: 캡슐화, 상속, 다형성
1. 데이터 보호
- 값이 프로그램과 관련없이 변질, 변경될 수 있음
→캡슐화: 알고리즘+데이터, (클래스 단위로 묶어서)경계 구분 및 (데이터 보호를 위한)은닉화
***은닉화: 데이터를 사용하지 못하게 만드는 작업
→감춘 데이터는 메소드를 통해 접근 가능(Getter/Setter 활용)
▶Getter(저장된 데이터 값 읽기), Setter(변수값 저장) 사용
1. lombok 라이브러리 사용
1) https://mvnrepository.com//artifact/org.projectlombok/lombok >> 1.18.12 .jar 다운로드 >> install
>> 위치: eclipse.exe
2) 이클립스에서 라이브러리 추가를 원하는 Java Project 우클릭 >> buildpath >> configure bulidpath
>> Add External JARs >> lombok-1.18.12 찾아서 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
class Student{
private int hakbun;
private String name;
private String sex;
public int getHakbun(){
return hakbun;
}
|
cs |
2. 이클립스 자체 기능 사용: 빈 칸에 우클릭 >> Source >> generate Getters and Setters
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class Student{
private int hakbun;
private String name;
private String sex;
public int getHakbun(){
return hakbun;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getSex(){
return sex;
}
public void setSex(String sex){
this.sex=sex;
}
public void setHakbun(int hakbun){
this.hakbun=hakbun;
}
}
|
cs |
***접근지정어
같은 클래스 | 같은 폴더(패키지) | 다른 폴더에서 상속 받는 경우 |
모든 클래스 | |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
- 접근 범위 크기: private < default < protected < public
1) public: 전체 공개, 어떤 위치든 상관없이 사용 가능
ex) public int age;
2) protected: 상속을 받는 경우 하위 클래스에서 사용 가능(사용빈도 적음)
ex) protected String name;
상속에서의 예외조건
1. static: 사용 가능하나 의미 없음
2. private: 상속 가능하나 사용 불가
3. 생성자: 상속 불가
3) default: 같은 패키지(src) 안에서만 사용 가능
ex) String name;
4) private: 비공개, 자신의 클래스에서 사용 가능
→다른 클래스에서 사용하려면 메소드를 통해 접근 가능
ex) private int age;
- 사용방식
멤버변수(일반변수:기본형 / 배열,클래스: 참조변수): 다른 클래스에서 값을 변경할 수 없게 은닉화 →private
메소드, 생성자: 다른 클래스와 연결해서 프로그램 동작 →public
2. 재사용 기법
1)상속(inheritance, is-a): 이미 만들어진 기능을 변경해서 사용(오버라이딩) 가능
ex) public class MyWindow extends JFrame
- 상속하는 클래스: super(생략 불가), 상속받는 클래스: this(생략 가능)
- Java에서는 단일상속만 가능
- Java의 모든 클래스는 java.lang.Object를 디폴트로 상속받음(모든 클래스의 최상위 클래스) → 형변환 주의
ex)형변환: 고양이 nyanya=(고양이)new 동물;
2)포함(has-a): 변경없이 그대로 사용
ex) public class MyWindow{
JFrame f=new JFrame();
}
-상속으로 사용
1
2
3
4
5
6
7
8
9
10
11
12
|
import javax.swing.*;
public class MainWindow extends JFrame{
public MainWindow(){
setSize(800,600);
setVisible(true);
}
public static void main(String[] args){
new MainWindow();
}
}
|
cs |
-포함클래스로 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import java.awt.Color;
import javax.swing.*;
public class MainWindow{
JFrame f=new JFrame();
public MainWindow2(){
f.setSize(800,600);
f.setVisible(true);
}
public static void main(String[] args){
new MainWindow();
}
}
|
cs |
3. 수정, 추가: 다형성
오버로딩: 새로운 기능 추가 →new |
오버라이딩: 기존에 있던 기능 수정 →modify |
메소드명 동일 | 메소드명 동일 |
메소드 매개변수의 개수나 데이터형이 다름 | 메소드 매개변수가 동일 |
리턴형 관계X | 리턴형 동일 |
같은 클래스 내에 존재 | 상속 받은 상태에서 가능 |
정적 바인딩(정해진 것 처리) | 동적 바인딩(실시간 처리) |
접근지정어 확장 가능, 축소 불가 |
'Java > Java 이론 정리' 카테고리의 다른 글
[Java] 28~29일차: java.lang (1) | 2020.07.22 |
---|---|
[Java] 예외처리 (1) | 2020.07.20 |
[Java] 18~20, 23~25일차: 클래스_변수, 생성자, 오버로딩, 추상클래스, 인터페이스 (0) | 2020.07.08 |
[Java] 16~17일차: 메소드 (0) | 2020.07.06 |
[Java] 13일차: 문자열 (0) | 2020.07.01 |
댓글