06_OOP(1)

김정욱·2022년 12월 15일
0

JAVA 복습

목록 보기
5/15
post-thumbnail
post-custom-banner

<OOP(Object Oriented Programming)>

1. 객체지향언어

1)정의

  • 객체 : 자신의 속성과 기능이 있어 구분되어 질 수 있는 것
  • 지향 : 어떠한 것을 목표로 하는 것.
    ==> 객체지향언어 : 현실세계는 물체와 개념 같이 독립되고 구분되는 객체로 이루어져 있고, 발생하는 사건들은 객체들 간의 상호작용이다. 이러한 개념을 컴퓨터로 옮겨 놓아 만들어 내는 것.
자바에서 객체란??
클래스에서 정의된 내용을 new 연산자를 통해 heap 메모리에 생성된 것
  • 4요소 : ①캡슐화, ②상속, ③다형성, ④추상화

2) 클래스

①정의 : 객체의 속성과 기능에 대해 정의한 것

②필수요소 : 캡슐화, 추상화의 적용

③등장배경

3) 추상화

① 정의 : 유연성을 위해 구체적인 것을 제거. 클래스의 속성과 기능 중 공통적인 것은 추출하고 불필요한 것은 제거하는 과정

② 장점 :

  • 코드의 중복 감소 -> 유지 및 보수 효율 증진
  • 코드의 유연성 증가
  • 코드의 재사용성 증가

ex)
국민 정보 관리 프로그램 - 국민 한 사람의 정보(속성)을 추상화한다면?
: 5천만명의 변수를 생성하고 만들 수 없으므로 공통적인 속성을 만들고 각각의 정보를 넣어서 사용한다.

③ 클래스 다이어그램

=>앞의 -, + 는 접근제한형을 private, public으로 하라는 의미.

3)캡슐화

① 데이터의 직접 접근 제한을 원칙으로 한다
-> 정보 은닉화, 보호화

② 캡슐화 원칙

  • 클래스의 멤버변수의 접근 제한은 private를 원칙으로 한다 ( 직접 접근 제한 )
  • 클래스 안에 멤버method를 만든다 (getter/setter) ( 간접 접근 )
  • method의 접근제한은 public으로 한다.

4) 객체 할당 (Instande)

① 정의 : new 연산자를 통해 heap 메모리에 생성된 것

ex)

Student 김철수 = new Student(); ⇒ 인스턴스하여 김철수라는 객체를 만듦
getter/setter를 이용하여 김철수 인스턴스의 멤버변수 출력 및 수정
Student 김영희 = new Student();
getter/setter를 이용하여 김영희 인스턴스의 멤버변수 출력 및 수정

2. 클래스

1) 표시형태 : [접근제한자][예약어] class 클래스명{ }

2) 3요소 : 필드, 생성자, 메소드

3) 접근제한자 :

public(default)
표기public class 클래스명class 클래스명
사용범위전체같은 패키지 내

3. 필드

1) 정의

  • 클래스에서 변수와 관련된 속성을 작성하는 곳

2) 멤버변수(== 필드에 쓰인 변수, 객체의 속성)

인스턴스 변수(iv)클래스 변수(cv, static 변수)
- 필드에 작성된 일반 변수- 필드에 static 예약어와 함께 작성된 변수
- heap 영역에 메모리가 할당- static 영역에 메모리가 할당
- 객체가 생성될 때 마다 생성- 프로그램 실행 시 1회만 생성되는 변수
- 객체가 참조하는 변수가 없을 때 사라짐==> 프로그램 실행시 static 메모리에 자동 할당되며, 프로그램 종료시 자동 소멸
- new 연산자에 의해서 객체가 생성될 때 메모리에 할당된다고 해서 인스턴스 변수라고 함

👉 지역 변수(lv) (멤버변수가 아님)

  • 메소드 또는 제어문 안에서 선언된 변수
  • stack 메모리 영역에 할당 되었다가, 메소드 종료시 소멸됨

3) 표현식

<표현식>
[접근제한자] [예약어] class 클래스명 {				// 클래스 표현식
	[접근제한자] [예약어] 자료형 변수명 [= 초기값];	// 필드 표현식
}
------------------------------------------------------------------
public class Academy { 
	public int temp1;
	protected int temp2;
	int temp3; 		//접근제한자 생략 시 (default)
	private int temp4; 	//캡슐화 원칙으로 private 사용
}

4) 접근제한자

5) 예약어

<static(->cv)>
* 같은 타입의 여러 객체가 공유할 목적의 필드에 사용
* 프로그램 시작시 static 영역에 자동으로 할당되는 멤버에게 적용
public class Academy { 
	private static int temp1;
}
<final(->상수)>
* 하나의 값만 계속 저장해야 하는 변수에 사용
public class Academy { 
	private final int TEMP1 = 100; // final 키워드가 붙은 필드명은 
					  // 모두 대문자로 표기
	private int temp4;
}

6) 필드 초기화 순서

4. 생성자

1) 정의

  • new 연산자를 통해 객체가 만들어 질 때 필드 초기화 + 필요 기능 수행
  • 생성자는 일종의 메소드이다

2) 규칙

① 생성자명은 클래스명과 반드시 동일해야 한다.
② 반환형(void, int ..)이 존재하지 않는다.

3) 표현식

기본생성자매개변수생성자
[접근제한자] 클래스명(){....};[접근제한자] 클래스명 (매개변수) { this.필드명 = 매개변수; };
- 컴파일러가 자동으로 기본 생성자 생성- 객체 생성시 전달 받으 값으로 초기화
- 매개변수 생성자 작성시 컴파일러가 기본 생성자 생성 X
- 상속에서는 반드시 기본 생성자 사용
- 오버로딩을 이용하여 작성
 [접근제한자] [예약어] 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;
	}
}
👉 우리가 클래스를 참조하여 객체를 생성할 때
ex) Class = Student
Student std1 = new Student(); 	//여기서 우측의 Student()가 생성자이다
// 기본생성자의 형태이고, 매개변수 생성자의 경우 new Studemt(매개변수) 이다

단축키(이클립스)

alt + shift + s

  • getter / setter 자동형성 단축키
  • 매개변수 생성
profile
절박한 마음을 갖고 하루를 보내자!!
post-custom-banner

0개의 댓글