객체 지향 언어
OOP:
(Object Oriented Programming)
객체,사물,물체 지향하다 코딩방법
객체: 키보드,옆집아저씨,나,미세먼지,모래한알,판소리 무형문화재
--> 독립적으로 각각 구분해서 인식할 수 있는 모든 것
객체지향:
--> 독립적으로 각각 구분해서 인실할수 있도록 프로그래밍 하는 것을 목표로 한다.
객체 지향 3 + 1대 특징 ( 외부로부터의 보호,정보 은닉)
1.캡슐화(Encapsulation)
코드길이 감소,코드의 재사용성 증가
1.상속(Inheritance) 추상화(Abstraction)
공통된 코드만 작성 개별적인것은
1.*다향성(Poltmorphism) 모두제거
객체 지향 언어 프로그램에서 속성은 변수(이름,나이,생년월일,키,몸무게,시력,주민번호)명사 기능은 매서드(밥을 먹는다,잠을잔다,출근한다,퇴근한다)동사
현실에서 객체(Object)란?
자신의 속성(값,data)과 기능(동작,행동)이 다른 것들 과 구분되어 식별 가능한 것
예)
모니터
-속성(변수): 크기,화소,주사율,버튼
기능(메서드):화면을 보여준다,밝기를 조절한다,화면을 끈다
객체 지향 언어란?
현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으면, 발생하는 모든 사건들은 객체간의 상호작용이다.
이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이 객체지향 언어이다.
클래스(class) (여래개의 자료형 여러개의 데이터 가능)
객체의 특성(속성,기능)에 대한 정의를 한 것
ex) 제품의 설계도,빵 틀
클래스 작성시 반드시 필요한 것
객체 지향 언어의 특징 중
추상화(abstraction),캡슐화(encapsulation)이 적용되어야함
추상화(abstraction)
유연성을 확보하기 위해 구체적인 것은 제거한다는 의미
작성하려는 클래스의 속성과 기능 중
프로그램에서 필요한 공통점을 추출하고,불필요한 부분을 제거하는 과정
MVC(model view controler)
캡슐화(encapsulation)
추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 기법
클래스의 가장 중요한 목적인 데이터이 직접 접근제한을 원칙으로 하여
클래스 외부에서 데이터의 직접적인 접근을 막고,
대신 간접적으로 데이터에 접근할 메소드를 클래스 내부에 작성하는 방법
(추상화를 통해서 정리된 속성과 기능을 하나로 묶고,
속성(데이터)의 직접 접근 방지를 하는 것.
이로 인해 부가적으로 정보 은닉 효과가 발생함.)
캡슐화 원칙
1.클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.
2.클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 멤버 메소드는 클래스 내부에 작성한다.
3.멤버 메소드는 클래스 밖에서 접근할 수 있도록 public으로 설정한다.
객체(Instance)의 할당
new 연산자와 생성자를 사용하여 객체 생성 시 Heap 메모리 영역에 서로 다른 자료형의 데이터가 연속으로 나열/할당된 객체 공간
클래스 선언
[접근제한자][예약어]class 클래스명 {
[접근제한자][예약어] 자료형 변수명; -------> 속성값
[접근제한자][예약어] 자료형 변수명; -------> 설정
[접근제한자] 생성자명() {}
[접근제한자] 반환형 메소드명(매개변수) { ---------->기능적의
//기능 정의 ---------->설정
}
클래스 접근제한자
필드(field)
필드 표현식
[접근제한자][예약어] class 클래스명 {
[접근제한자][예약어]자료형 변수명[+초기값];
}
필드 예시
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 (default)
private int temp4; //캡슐화 원칙으로 private 사용
필드 접근제한자
구분 해당 클래스 내부 같은 패키지 내 후순 클래스 내 전체
필드 예약어 - static
같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며,
프로그램 start시에 정적 메모르(static) 영역에 자동 할당되는 멤버에 적용
static 표현식
public class Academy {
private static int temp;
}
필드 예약어 - final
하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
final 표현식
public class Academy {
private final int TEMP =100; // final 키워드가 붙은 필드명은
//모두 대문자로 표기
pruvate int temp4;
}
필드(Field) - 클래스 초기화 블럭
클래스 초기화 블럭
인스턴스 블럭({}) - 인스턴스 변수를 초기화 시키는 블럭으로 객체 생성시 마다 초기화
static(클래스)블럭(static{}) - static 필드를 초기화 시키는 블럭으로 프로그램 시작 시 한 번만 초기화
클래스 초기화 블럭 표현식
[접근제한자] static 자료형 필드1 = 10;
[접근제한자] 자료형 필드2 = 20 //명시적 초기화;
static{ 필드1 = 30; }
{ 필드2+ 40; }
}
필드(Field) 초기화 순서
클래스 변수
JVm기본값 -> 명시적 초기값 -> 클래스 초기화 블록 초기값
인스턴스 변수
JVM기본값 ->명시적 초기값 -> 인스턴스 초기화 블록 초기값 -> 생성자를 통한 초기값
생성자(constructor)
생성자란?
객체가 new 연산자를 통해 Heap메모리 영역에 할당될 때
객체 안에서 만들어지는 필드 초기화 + 생성 시 필요한 기능 수행
생성자는 일종의 메소드로 초기값을 받아서 객체의 필드에 기록
생성자 규칙
생성자의 선언은 메소드 선언과 유사하나 반환 값이 없으며
생성자명을 클래스명과 똑같이 지정해주어야 함
생성자 표현식
[접근제한자][예약어]class 클래스명 {
[접근제한자]클래스명(){}
{접근제한자}클래스명(매개변수) { (this.)필드명 = 매개변수;}
}
public class Academy {
private int studentNo;
private String name;
public Academy(){} //기본 생성자
public Academy(int studentNo String name) { //매개변수 있는 생성자
this.studentNo = studentNo;
this.name = name;
}
}
기본 생성자
작성하지 않은 경우,클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성
매개변수 생성자
-객체 생성 시 전달받은 값으로 객체를 초기화 하기위해 사용
-매개변수 생성자 작성 시 컴파일러가 기본 생성자를 자동으로 생성해주지 않음
-상속에서 사용 시 반드시 기본 생성자를 작성
-오버로딩을 이용하여 작성