OOP
Object Oriented Programming
-> 객체 지향 프로그래밍
--> 독립적으로 각각 구분해서 인식할 수 있도록 프로그래밍하는 것을 목표로 하는것.
객체 지향 3 + 1 특징
캡슐화 (Encapsulation)
상속 (inheritance)
다향성 (Polymorphism)
다양한 형태를 지닐 수 있는 개념. 가변성??
상속과 추상화의 개념을 거치게 되면 코드길이 감소, 코드의 재사용성 증가를 기대할수 있다.
현실에서 객체(Object)란?
속성(값, data)과 기능(동작, 행동)이 다른 것들 과 구분되어 식별 가능한 것
변수 메서드
이름,나이,생년,키등\출근하다,퇴근하다등
명사 \ 동사
현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며
발생하는 모든 사건들은 객체간의 상호작용이다.
이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.
자바에서 객체란?
new 연산자를 통해 메모리 영역에 생성된 것
ex) Variable vr = new Variable();
객체의 특성(속성, 기능)에 대한 정의를 한 것
ex) 제품의 설계도 빵 틀
클래스 작성시 반드시 필요한것
객체 지향 언어의 특징 중
추상화, 캡슐화가 적용되어야 함
캡슐화
데이터의 직접 접근제한을 원칙으로 하여 직접적인 접근을 막고, 간접적으로 데이터에 접근할 수 있는 메소드를 작성하여 클래스 내부에 작성하는 방법.
setter와 getter을 사용한다.
private String name;
private char gender;
private String pNo;
private String address;
private String phone;
private int age;
// *** 데이터 직접 접근 제한 ***
// public(공공의) -> private(사적인, 개인적인) 변경
// 기능 == 행동 == method
// alt + shift + s
// 또는 상단 메뉴 Source 클릭
// -> Generate Getters and Setters... 클릭
// -> selectAll -> generate
public void tax() {
System.out.println("세금을 냅니다.");
}
public void vote() {
System.out.println("투표를 합니다.");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getpNo() {
return pNo;
}
public void setpNo(String pNo) {
this.pNo = pNo;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void ex1() {
// 국민 객체 만들기
People p1 = new People();
// People p1 : People 객체의 주소를 저장하여 참조하는 변수 p1
// new People() : 새로운 People 객체를 Heap영역에 생성
// ** 클래스 이름이 자료형처럼 사용된다
// == 그래서 클래스를 " 사용자 정의 자료형" 이라고도 한다!! **
p1.setName("홍길동");
//p1.name = "홍길동";
p1.setAge(25);
p1.setGender('남');
p1.setPhone("010-1234-1234");
p1.setpNo("200303-1234567");
p1.setAddress("서울시 중구 남대문로 120 대일빌딩 3층 E강의장");
System.out.println("p1의 name : " + p1.getName());
System.out.println("p1의 age : " + p1.getAge());
System.out.println("p1의 gender : " + p1.getGender());
System.out.println("p1의 pohne : " + p1.getPhone());
System.out.println("p1의 pNo : " + p1.getpNo());
System.out.println("p1의 address : " + p1.getAddress());
System.out.println("=====================================");
People p2 = new People();
p2.setName("김동현");
p2.setAge(35);
p2.setGender('남');
p2.setPhone("010-9***-****");
p2.setpNo("8*****-1******");
p2.setAddress("서울시 서초구 양재동");
System.out.println("p2의 name : " + p2.getName());
System.out.println("p2의 age : " + p2.getAge());
System.out.println("p2의 gender : " + p2.getGender());
System.out.println("p2의 pohne : " + p2.getPhone());
System.out.println("p2의 pNo : " + p2.getpNo());
System.out.println("p2의 address : " + p2.getAddress());
}
객체(Instance)의 할당
new 연산자와 생성자를 사용하여 객체 생성시 Heap 메모리 영역에 서로 다른 자료형의 데이터가 연속으로 나열/할당된 객체 공간
public class Student { // 클래스의 선언부
// [접근제한자][예약어] class 클래스명
// 접근제한자 public : 같은 프로젝트 내에서
// 어떤 클래스에서든 import 할 수 있음을 나타냄.
// 1. 필드(field) : 객체의 속성을 작성하는 클래스 내부 영역
// == 멤버 변수 : 메서드 밖에 작성된 변수
// 인스턴스 변수 : 필드에 작성되는 일반 변수
// 클래스 변수 ( == static 변수 ) : 필드에 static 예약어가 작성된 변수
/ 필드 구성
[접근제한자][예약어] 자료형 변수명 [=초기값;]
+ public final 기본자료형
# protected static (참조형)
~ (default) final static 배열
- private static final 클래스명
*
* 필드의 접근 제한자의 뜻 : 직접 접근 가능한 범위를 나타냄.
동일 클래스 내 에러 없음
동일 패키지 내 private만 에러 ( 같은 패키지 내에 있기 때문에 public, protected, (edfault) 3개는 접근 가능 )
같은 프로젝트 다른 패키지 내 v1제외 에러 (public만 가능)
extends 사용시 v2까지 가능
자바에서의 각 변수의 특징
1)). 클래스 변수
static으로 선언된 멤버변수, 프로그램 실행시 정적 메모리 영역에 자동 할당되며,
프로그램 종료시 자동 소멸되는 변수
2)). 인스턴스 변수
new 연산자에 의해서 동적 메모리(Heap)에 할당되는 객체(인스턴스)안에 할당되는 this에 의해 참조된다.
가비지콜렉터에 의해 삭제된다.
3)). 지역 변수
메소드 또는 제어문 안에서 선언된 변수로 스택(Stack)에 할당되었다가
메소드or제어문 종료시 소멸
생성자 Constructor
/* - new 연산자를 통해서 객체를 생성할 때
생성된 객체의 필드 값 초기화 + 지정된 기능을 수행하는 역할
1) 생성자의 이름은 반드시 클래스명과 같아야 한다.
2) 반환형이 존재하지 않는다.
// 기본 생성자
// [접근제한자] 클래스명() { 코드 }
public Student() {
// 객체가 생성될 때 수행할 코드
System.out.println("기본 생성자에 의해서 Student 객체가 생성됨");
}