1. 객체지향 언어
- 컴퓨터 프로그램을 명령어의 목록으로 보는 시선에서 벗어나 현실 세계에서와 같이 여러 개의 독립된 단위, "객체"와 객체 간의 상호작용의 개념을 컴퓨터로 옮겨놓은 언어이다.
- 객체들이 메시지(Message)를 통하여 통신함으로써 원하는 결과를 얻는다. 각 개체는 데이터와 데이터를 처리할 수 있는 메소드로 구성된다.
1-1. 객체지향 3대특성
1. 캡슐화 : 클래스 외부에서 데이터에 대한 직접적인 접근을 막고, 대신 데이터를 처리하는 함수들을 클래스 내부에 작성하는 방법
1) 멤버변수에 대한 접근 권한 - [ private ]원칙 (잔액, 예금주명)
2) 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을 클래스 내부에 작성
3) 멤버함수는 클래스밖 접근할 수 있도록 접근권한자 [ public ]으로 설정 (잔액조회, 예금주명 조회)
2. 상속
3. 다형성
2. 객체
1) 현실세계 : 현실세계에서 다른 것과 구분되어 독립적으로 존재하는 것들 (유형 , 무형 , 개념 등등)
2) 자바 : 클래스에 정의된 내용으로 new연산자를 통해 메모리에 할당된 결과물
데이터 + 메소드(데이터 변경,조작 가능)
2-1. 인스턴스(instance)
: 클래스로부터 생성된 객체 (객체 = instance)
2-2. 객체의 할당
- new연산자와 생성자를 통해서 객체를 생성한다.
-->heap메모리 공간에 서로 다른 자료형의 데이터가 연속으로 나열된 객체공간이 생김
클래스 ===(인스턴스화)===> 객체
3. 클래스 ( 구조체 + 메소드(기능) )
- 객체를 생성하기 위해 필요한 개념
- 연관성이 있는 여러 자료형의 변수, 메소드(기능)들을 함께 묶어 놓은 단위(사용자 정의 자료형)이다.
(부서명,사원이름,사원번호 등을 각각의 배열로 관리하는게 아니고 전체를 묶어서 관리)
- 공통적인 요소를 추상화하여 클래스를 정의
(= 설계도, 붕어빵 틀)
3-1. 구조체, 배열, 변수 비교
변수 | 1개의 자료형, 1개의 데이터 |
배열 | 1개의 자료형, 여러 개의 데이터 |
구조체 | 여러 개의 자료형, 여러 개의 데이터 |
3-1-1. 구조체
-연관성이 있는 여러 자료형의 변수들을 한데 모아 묶어 놓은 단위(사용자 정의 자료형)
( 여러개의 자료형, 여러개의 데이터 )
- 클래스와는 달리 기능(메소드)은 없다.
3-2. 클래스의 구조
[접근제한자] [예약어] class 클래스명 { //접근제한자:public, default만 사용
//public(기재), default(생략)
//필드부
//생성자부
//메소드부
}
==================================================
public class Member {
private String name; //필드부
public Member() {} //생성자부
public String getName() { //메소드부
return name;
}
public void setName(String name) {
this.name = name; //this -> 객체 주소 가리킴
}
* this : 모든 인스턴스의 메소드에 숨겨진 채 존재하는 레퍼런스로 , 할당된 객체를 가리킴
함수실행 시 전달되는 객체의 주소를 자동으로 받음
3-2-1. 클래스의 구조(자세히)
public class명 {
//필드부
/* 1. 필드 : 객체의 속성을 저장하기위한 공간
*
* 멤버변수 == 인스턴스변수
*
* <표현법>
* 접근제한자 [예약어] 자료형 변수명 [= 초기값];
*
* 접근제한자는 private 으로 하는게 객체지향설계원칙 중 하나이다. --> 캡슐화
* 접근제한자 : 접근할 수 있는 범위 제한할 수 있다.(public > protected(상속 간 관계) > default(같은 패키지) > private(해당클래스내부))
* */
//생성자부 : 객체 생성하기 위한 일종의 메소드
/* 매개변수가 없는 생성자: 기본 생성자 (생략 가능)
* 매개변수 있는 생성자 --> 생략 불가능 (매개변수가 있는 생성자가 있는 경우 매개변수가 없는 기본생성자도 생략 불가능)
*
* 접근제한자 클래스명([매개변수]) {
*
* }
*
* 반환형이 없고, 반드시 클래스명과 동일하게 작성해야한다.
**/
//메소드부 : 기능을 구현
/*
* [접근제한자] [예약어] 반환형 메소드명 ([자료형 매개변수명]) {
* 수행내용;
* [return 반환값;]
* }
* 반환값 없는 경우 반환형 -> void
*
* 접근제한자 -> public (외부에서 접근가능해야함)
* 간접적으로 접근해서 값을 담거나 변경, 값을 가져올 수 있는 메소드
* -> private -> 그 멤버변수에 더이상 접근 불가
*/
3-3. 클래스 접근제한자
1) public (+) : 전체에서 접근 가능하다.
2) default (~) : 같은 패키지 내에서만 접근이 가능하다.
public class 클래스명 {
//1.클래스 접근제한자 -> public
}
class 클래스명 {
//2.클래스 접근제한자 -> default
}
3-4. 클래스 다이어그램
- 필드: (+)public (#)protected (~)default (-)private
4. 필드(Field)
- 프로그램 시작 시에 객체를 생성하지 않아도 정적 메모리 영역에 자동 할당되어 공유할 목적으로 생성.
4-1. 필드 예약어
1) final : 한번 설정하면 변경할 수 없는 변수
private final int TEMP1 = 4;
4-2. 선언 위치에 따른 변수의 종류
1) 전역변수 : 클래스 내에서 어디서든 사용가능한 변수 / 필드부에서 선언
미초기화시 JVM이 기본값으로 초기화한다.
2) 지역변수 : 특정한 구역({ })안에 생성되어 그 지역에만 사용할수 있는 변수
지역변수는 반드시 초기화해야한다.
4-2-1. 전역변수
1) 멤버변수 (인스턴스 변수)
* 생성 시점 : 클래스 내부에서 선언되며, new 연산자를 통해서 클래스의 객체 생성할 때 만들어진다.
* 소멸 시점 : 객체 소멸 시 같이 소멸
→ 즉 객체를 생성하지 않으면 사용할 수 없다!!
→ 객체변수가 객체화 시킬때마다 서로 다른 저장공간에 할당된다.
2) 클래스변수 (static 변수)
* 생성 시점 : 프로그램 실행(해당 객체 생성이 안되도)과 동시에 무조건 static 메모리 영역에 할당
* 소멸 시점 : 프로그램이 종료될 때 소멸
→ 즉 객체를 생성하지 않아도 사용할 수 있다!
→ 멤버변수와 달리 여러번 객체화 시켜도 공통적인 저장공간에 할당된다.
→ 공통적인 속성을 유지해야할경우 사용
public class FieldTest3 {
public static String pubsta = "public static";
private static String prista = "private static";
public FieldTest3() {
// TODO Auto-generated constructor stub
}
//pubsta(접근제한자 : public) -> 언제 어디서든 접근가능하기 때문에 setter,getter메소드가 필요없음
//setter,getter -> private 변수에 대해서만 만들기
//static예약어가 붙으면 메소드 또한 static을 붙여서 만들어야 한다.
public static void setPrista(String prista) { //여기도 static붙는다.
//this.prista = prista; //this -> 객체의 주소값 가지고 있음 / static은 객체 생성하지 않고 프로그램 실행과 동시에 static영역에 할당되므로 this가 존재하지 않는다.
FieldTest3.prista = prista;
1) 접근제한자가 public인 static변수 -> setter, getter메소드 필요없다.
2) 접근제한자가 private인 static변수 -> setter, getter메소드(static붙여야 함) 필요.
3) static 변수 -> 메소드도 static 붙이기
4) this : 객체의 주소값을 가지고 있는데 static은 객체를 생성하지 않고 메모리에 바로 할당시키므로 this가 존재하지 않는다.
5)
public static void setPrista(String prista) {
FieldTest3.prista = prista; //클래스명.static변수 = 매개변수;
}
4-2-2. 지역변수
* 생성 시점 : 메소드 호출할 때 생성
* 소멸 시점 : 메소드 종료시에 소멸
5. 생성자 (반환형 X)
- 객체가 new 연산자를 통해 Heap 메모리 영역에 할당될 때, 객체 안에서 만들어지는 필드 초기화
- 생성자는 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록
5-1. 생성자 작성하는 목적
1) 객체를 생성해주기 위한 목적
2) 매개변수로 전달받은 값들을 필드에 바로 초기화할 목적
5-2. 생성자의 종류
1) 기본생성자
public User() {
//단지 객체생성을 목적 할 때 사용
//기본생성자를 생략하는 경우는 오류가 아니다 --> JVM이 자동으로 만들어줬기 때문에 항상 객체 생성이 가능했던 것
//매개변수가 있는 생성자가 있는 경우에는 기본생성자라해도 생략이 불가능하다.
}
2) 매개변수가 있는 생성자
public User(String userId, String userPwd, String userName) {
this.userId = userId;
this.userPwd = userPwd;
this.userName = userName;
//나머지 필드부분이 있는 경우(userHeight 등) JVM이 넣어준 초기값으로 들어가있다.
}
5-2. 오버로딩
- 한 클래스 내에서 동일한 이름의 메소드를 여러번 생성하는 것
5-2-1. 오버로딩 조건
1) 메소드 이름이 같아야 한다.
2) 매개변수의 개수, 자료형, 순서가 달라야 한다.
3) 매개변수의 개수, 자료형, 순서가 모두 같고, 접근제한자 또는 반환형이 다른 경우 -> 오버로딩 성립 불가능
6. 메소드부
6-1. setter 메소드
- 필드(변수)에 변경할 값을 전달 받아서 필드 값을 변경해주는 메소드
6-1. getter 메소드
- 필드에 기록된 값을 읽어서 요청한 쪽으로 넘기는 메소드
출처 및 참고:
kh정보교육원 교육자료
'Java > 정리' 카테고리의 다른 글
[Java] 상속(Inheritance) (0) | 2021.05.19 |
---|---|
[Java] 문자열 compareTo()_문자열비교메소드 (0) | 2021.05.17 |
[Java] 2차원 배열 문제 (0) | 2021.05.12 |
[Java] 배열복사 (0) | 2021.05.11 |
[Java] Math.random() (0) | 2021.05.08 |