1. 추상화 (Abstraction)
- 어떤 물체(Object)에서 주된 특징을 부각시켜 표현하고, 나머지 부분은 과감하게 생략하는것
- OOP에서 사용되는 추상화도 이와 비슷하다
- 한 물체를 대표하는 속성(명사)과 행위(동사)를 추출해내는 것을 프로그래밍에서는 추상화라고 한다
- 상속이 목적
abstract class A { } ; // class 앞에 abstract를 붙이면 추상클래스가 된다
2. 캡슐화 (Encapsulation) = 은닉화
- 캡슐화는 중요한 것들은 외부에 보이지 않게 숨기거나 같은것끼리 묶는 특징
- 특징 중 하나인 은닉화는 외부에서 접근을 할 수 없도록 막는 것을 말하며 간접적으로 접근이 가능하다
- 멤버변수의 값을 세팅하거나 가져올때 getter / setter 메소드를 사용한다
- 마우스 오른쪽버튼 => source => Generate Getters and Setters 에서 가져오면 쉽다
public class Encapsulation {
// [멤버변수]
private String name;
private String accountNo;
private int balance;
// Getter
public String getName() {
return name;
}// getName
public String getAccountNo() {
return accountNo;
}// getAccountNo
public int getBalance() {
return balance;
}// getBalance
// Setter
public void setName(String name) {
this.name = name;
}// setName
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}// setAccountNo
public void setBalance(int balance) {
this.balance = balance;
}// setBalance
}
3. 생성자 (Constructor)
- 객체가 생성될 때(인스턴스화) 최초로 실행되는 메소드를 의미한다
- 특징
ㄴ 생성자 이름은 클래스 명과 동일해야 한다
ㄴ 반환타입을 가져선 안된다
ㄴ 생성자의 접근지정자는 주로 public 속성이다
- 역할
ㄴ 멤버 변수를 초기화 하는 일을 한다
ㄴ 생성자를 구현하지 않았을 경우 컴파일러는 default생성자를 제공해준다
ㄴ 구현했다면 default생성자를 제공해 주지 않는다
ㄴ 생성자를 다양하게 오버로딩 함으로써 다양한 초기값을 부여할 수 있다
class Saram{
// 초기화용 메소드로 멤버변수 초기화]
String name;
String lastJumin;
// 멤버변수 초기화용 메소드]
void initialize(String name, String lastJumin) {
this.name = name;
this.lastJumin = lastJumin;
}// initialize
void print() {
System.out.println(String.format("%s는 %s입니다",name,lastJumin.charAt(0) == '1'
? "남자" : "여자"));
}// print
}// Saram
class Saram2{
// 생성자로 멤버변수 초기화]
String name;
String lastJumin;
// 생성자
public Saram2() {
name="기본값";
lastJumin="1234567";
}// Saram2()
// 인자생성자]
public Saram2(String name) {
this.name = name;
this.lastJumin = "1234567";
}
public Saram2(String name, String lastJumin) {
this.name = name;
this.lastJumin = lastJumin;
}
void print() {
System.out.println(String.format("%s는 %s입니다",name,lastJumin.charAt(0) == '1'
? "남자" : "여자"));
}
}// Saram2
public class Constructor01 {
public static void main(String[] args) {
// 인스턴스화/객체화/메모리 생성]
Saram saram = new Saram();
// 초기화용 메소드 미 호출시]
// saram.print();// lastJumin 이 에러
// 초기화용 메소드 호출시]
saram.initialize("홍길동", "1234567");
// 정보출력]
saram.print();
// 인스턴스화/객체화/메모리 생성]
Saram2 saram2_1 = new Saram2();
saram2_1.print();
Saram2 saram2_2 = new Saram2("김길동");
saram2_2.print();
Saram2 saram2_3 = new Saram2("김길녀", "2345678");
saram2_3.print();
}// main
}// class
4. 싱글톤 (SingleToneDesign)
- 클래스를 설계하는 디자인 패턴의 하나로 하나의 인스턴스 즉 하나의 메모리를 생성해 이를 공유하고자 할때 사용하는 패턴
즉, 하나의 메모리를 서로 공유해서 사용함으로 값 변경시 문제가 발생할 수 있는 경우는 사용하지 않는게 좋다
ex) java.util 패키지의 Calendar 클래스
class SingleTone {
// 멤버변수]
int shareVar;
private static SingleTone single = new SingleTone();
// 생성자]
// 1] 접근지정자를 private 로 지정
private SingleTone() {
}// SingleTone()
// 멤버메소드]
// 2] 정적 메소드로 해당 클래스의 객체를 반환하도록 정의
public static SingleTone getInstance() {
return single;
}// SingleTone getInstance()
void print() {
System.out.println(String.format("shareVar] %d",shareVar));
}
}// SingleTone
'개발 > JAVA' 카테고리의 다른 글
16. JAVA 배열 (Array) / 헤테로지니어스 (Heterogeneous, 이질화) (0) | 2020.06.08 |
---|---|
15. JAVA 패키지 / 패키지 배포 (0) | 2020.06.08 |
13. JAVA 상속성 / 오버로딩(OverLoading) / 오버라이딩(OverRiding) / this / super (0) | 2020.06.08 |
12. JAVA ect 클래스 (Math / Date / Calendar / SimpleDateFormat) (0) | 2020.06.08 |
11. JAVA String Basic / String Method / StringBuffer (0) | 2020.06.08 |