일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- join
- 비교 연산자
- 반복문
- @PreAuthorize("isAuthenticated()")
- spring 게시판 삭제
- 오버로딩
- 오버라이딩
- 객체
- 친절한 SQL
- 논리 연산자
- 이클립스 설치
- SQL
- 인텔리제이 Web 애플리케이션
- SpringSecurity 로그인
- 객체지향
- 스프링시큐리티 로그아웃
- SQL 튜닝
- 친절한 SQL 튜닝
- 예약어
- 상속
- 함수
- SQL튜닝
- 연산자
- 배열
- 식별자
- 산술 연산자
- java
- 자바의정석
- StringBuffer
- SpringSecurity 로그아웃
- Today
- Total
gi_dor
[Java] CH6 객체지향 개념 본문
✔ 6 ~ 7장(다형성)까지 공부 , 반복 후 요약 , 규칙 외우기
[6장 - 객체지향 프로그래밍Ⅰ]
23.05.01
4대 핵심 : 캡슐 , 상속 , 다형성 , 추상화
설계 5대 원칙
S. SRP - 단일 책임원칙 , 1메서드 1책임
O. OCP - 개방(상속) , 폐쇄(변경) 원칙
L.
I.
D.
1. 객체지향 언어
1 ) 정의 : 프로그래밍언어 + 객치제향개념 (규칙)
2 ) 특징 :
코드의 재사용이 높음
확장성 (유지보수)
중복코드 제거
3 ) 핵심 4대 개념
- 캡슐화
- 상속
- 추상화
- 다형성
2. 클래스
1 ) 정의 : 객체를 정의
- 변수 : 값을 하나만 저장 - 메모리공간
- 배열 : 같은 타입의 여러 데이터를 하나의 묶음으로 저장
- 구조체 : 서로다른 타입의 여러 데이터를 하나의 묶음으로 저장
- 클래스 : 객체를 정의하다 , 서로관련된 변수의 묶음 + 메서드
- 객체의 설계도 : 객체를 이용하기 위해서
- 변수 + 메서드
- 사용자 정의타입
2 ) 하나의 소스파일에서 클래스가 여러개인 경우
- public class 가 있는 경우 ▶ 소스 파일명 = public class 명
- public calss 가 없는 경우 ▶ 소스 파일명 = 아무 이름의 class명
- public은 하나만 사용가능
- 소스 파일과 public class 대소문자 일치해야함
- 소스 파일 하나당 클래스가 한개가 원칙
3. 객체
1 ) 정의 : iv 묶음 (인스턴스의 변수 묶음)
실제로 존재하는것. 사물 또는 개념
2 ) 특징 : 객체의 기능(메서드) 과 속성(멤버변수) 에 따라 다름
3 ) 클래스와 객체의 관계
클래스 (설계도) -----인스턴스화-----> 객체 (인스턴스)
▪ 객체 : 모든 인스턴스를 대표하는 일반적 용어
▪ 인스턴스 : 특정 클래스로부터 생성된 객체
Ex. Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스 라고 한다
4 ) 객체의 구성
① 속성 : 멤버변수 , 상태, 특성 , 필드 ▶ 크기 , 길이 , 높이 , 색상 , 볼륨 채널 등등
② 기능 : 메서드 , 함수 , 기능 ▶ 켜기 , 끄기 , 볼륨높이기 , 볼륨 낮추기 , 채널 변경하기 등등
5 ) 선언과 생성
ex. Tv 클래스를 선언한 다는 것은 Tv설계도를 작성한것 이다.
Tv인스턴스를 생성해야 Tv제품을 사용 할수잇다
Tv t ; // Tv클래스의 참조변수 t를 선언
t = new Tv () ; // Tv인스턴스 생성후 생성된 Tv인스턴스의 주소를 t 에 저장
▶ Tv t = new Tv()
인스턴스는 참조변수를 통해서만 다룰수 있으며 참조변수의 타입은 인스턴스의 타입과 일치 해야한다
6 ) 객체 배열
객체 배열 안에 객체가 저장 x , 객체의 주소가 저장된다
참조변수들을 하나로 묶은 참조 변수 배열 이다.
타입 [ ] 배열이름 = new 타입 [n];
Ex. 길이가 5인 Tv타입의 참조변수 배열 ▶ Tv [ ] t = new Tv [5];
객체를 다루기 위해 참조변수들이 만들어진것, 객체가 저장되지 않음 .
객체를 생성후에 '초기화' 해서 각 요소에 저장을 꼭 해야한다.
Tv [ ] tArr = new Tv [3];
① tArr [0] = new Tv();
tArr [1] = new Tv();
tArr [2] = new Tv();
② Tv [ ] tArr = new Tv[3];
Tv [ ] tArr = { new Tv() , new Tv() ,new Tv() };
③ Tv [ ] tArr = new Tv [100] ;
for ( int i = 0; i< tArr.length; i++){
tArr[ i ] = new Tv ();
4. 변수의 종류
1 ) 선언 위치에 따른 변수 종류 :
1️⃣ 클래스 영역
▪ cv :
- 인스턴스 앞에 static을 붙이기만 하면된다
- 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)를 공유함
- 한 클래스의 모든 인스턴스들이 공통적인 값을 유지하는 속성의 경우 클래스 변수로 선언 해야함
- 인스턴스를 생성하지 않고 언제든지 사용 가능
- '클래스 이름.클래스변수'
객체 생성 x
아무때나 사용이 가능함
자동생성
클래스가 메모리에 올라갈 때 생성됨
▪ iv :
- 클래스의 인스턴스를 생성할 때 만들어짐
- 서로 다른 값을 가질수 있다
- 인스턴스 마다 각각의 상태를 유지해야하는 속성의 경우 인스턴스 변수로 선언
- 변수의 값을 읽거나 저장하기 위해 인스턴스를 먼저 생성 해야한다.
객체를 생성 해야만 사용가능
객체생성 필요
인스턴스가 생성될 때 생성됨
2️⃣ 메서드 영역
▪ lv :
- 메서드 종료시 자동제거
- 클래스 이외에 영역에서 선언 ( 메서드 , 생성자 , 초기화 블럭 내부)
- 변수 선언문이 수행될 때 생성됨
✔ 클래스 변수 : cv
공통속성 ( 카드의폭 , 카드의 넓이)
클래스명 . 객체명
✔ 인스턴스 변수 : iv
개별속성 ( 카드의 색상, 숫자)
참조변수명 . 객체명
✔ 지역변수: lv
메서드 내에 위치
서로다른 메서드 영역이라면 이름이 중복되어도 가능하다
클래스변수는 하나의 저장공간 ( 메모리공간 ) 을 공유하므로 항상 공통 된 값을 갖는다
인스턴스 변수는 인스턴스를 생성 할 때 마다 생성되어 각기 다른 값으로 유지할수 있다.
✔ 클래스(설계도) 가 왜 필요한가 ?
객체를(제품) 을 생성하기 위해
✔ 객체가 (제품) 왜 필요한가 ?
객체(제품)를 사용 하기 위해서
✔ 객체 (제품)를 사용 한다는 것은?
객체(Tv)가 가진 속성(변수) 과 기능 (메서드)을 사용하려고
1. 메서드
반드시 클래스 안에 있어야함
'하나의 메서드는 한가지 기능만 수행하도록 작성해야 한다.'
1 ) 정의 :
특정작업을 수행하는 문장들을 묶어 놓은 것
어떤 값을 입력 받아서 처리하고 결과를 돌려준다 ( 입력받는 값이 없을수도 있고, 결과를 돌려 주지 않을수도 있다.)
2 ) 사용 하는 이유 :
▪ 높은 재사용성 : 한번 만든 메서드는 몇번이고 호출할수 있으며 다른 프로그램에서도 사용가능
▪ 중복된 코드의 제거 : 같은 내용의 여러 문장들을 묶어서 하나의 메서드로 작성해서 사용함
▪ 프로그램의 구조화 : 기존 main 메서드 안에 모든 문장을 넣어서 사용했었는데 , 문장들을 작업단위로 나눠서 여러개의 메서드에 담아 프로그램의 구조를 단순화 시킴
3 ) 메서드 = 선언부 + 구현부
▪ 선언부 - 반환타입 메서드 이름 ( 타입 변수명 , 타입 변수명 )
'메서드이름' '매개변수의 선언' '반환타입' 으로 구성 되었으며 어떤 값을 필요하고 , 작업의 결과로 어떤 타입의 값으로
반환 하는지 정보를 제공함
▪ 구현부 - { 메서드 호출시 실행될코드 }
4 ) 매개변수의 선언
매개변수 ? 메서드가 작업을 수행하는데 필요한 값( 입력 )
변수간의 구분은 , 를 사용 하며 변수의 타입 생략 불가함
5 ) 반환타입
메서드의 작업수행 결과인 반환값의 '타입'을 적는다
반환값이 없는 경우 void 를 사용 한다
Ex. 작업을 수행하는데 필요한 값도, 작업 수행의 결과인 반환 값도 없는 메서드
void print99dan () {
for ( int i = 1; i <= 9; i++){
for( int j = 2; j <= 9; j++){
System.out.print(j+ "*" +i+ "=" +(i*j)+" ");
}
System.out.println();
}
}
6 ) 메서드의 구현부
메서드의 선언부 다음에 오는 괄호 { } 를 '메서드의 구현부' 라고 한다
메서드를 호출 할 때 수행될 문장을 넣으면 된다
7 ) return문
메서드의 반환 타입이 void가 아닌 경우 구현부 { } 안에 return 반환값; 이 반드시 포함되어야 하며
작업 수행 결과인 반환값을 호출한 메서드로 전달하는데 반드시 반환타입과 일치하거나 , 자동 형변환이 가능해야한다
메서드의 입력 (매개변수)은 여러 개 일수 있으나 출력(반환 값은) 최대 하나만 허용한다
8 ) 지역변수
메서드 내에 선언된 변수들은 메서드 내에서만 사용 할수 있다.
서로 다른 메서드 라면 같은 이름의 변수를 선언 해도된다
메서드내에 선언된 변수를 우리는 ' 지역변수 ' 라고한다.
9 ) 메서드의 호출
메서드를 호출 해야만 구현부 { } 의 문장들이 수행된다.
메서드 이름 ( 값1, 값2,....);
print99dan( ) ; // void print99dan ( ) 호출
int result = add ( 3, 4); // int add ( int x , int y ) 호출하고 결과를 result에 저장
10 ) 메서드 실행 흐름
같은 클래스 내의 메서드 끼리는 참조변수를 사용 하지 않고도 서로 호출이 가능함
static 메서드는 같은 클래스 내의 인스턴스 메서드를 호출 할수 없다
클래스 작성 ▶ 객체생성 ▶ 메서드 호출 ▶ 메서드 안 수행문 수행 ▶ 호출한곳으로 반환
2. return문
1 ) 규칙
- 실행중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
- 반환타입이 void 인 경우 생략가능 , 컴파일러가 자동으로 추가해줌.
- 반환타입이 void가 아닌경우 반드시 return문 필요
- 조건식 을 쓸 때에 ( 메서드 내에서 ) return문이 거짓일 경우에도 쓰여있는지 확인.
2 ) 반환값
반환타입이 void가 아닌경우 반환타입을 일치 시켜야됨
아니라면 자동형변환 가능한 타입 ( int 인 경우 byte short char)
반환값 O - return 필수
반환값 ⨉ - return 생략 , void 필수
3 ) 반환값 개수 : 0 ~ 1개
4 ) 반환 타입 = 반환하는 값의 타입 = 반환값을 받는 변수의 타입
3. JVM 메모리 구조
1. 메서드 영역
어떤 클래스가 사용되면 , 해당 클래스 파일을 읽어서 분석, 클래스에 대한 정보를 저장한다
이때 그 클래스의 클래스 변수도 이 영역에 함께 생성된다
2. 힙 heap
인스턴스가 생성되는 공간 , 프로그램 실행중 인스턴스는 모두 이곳에 생성된다
인스턴스 변수들이 생성되는 공간이다
3. 호출스택 call stack
메서드의 작업에 필요한 메모리 공간을 제공
메서드가 호출되면 메서드에 메모리가 할당됨, 작업을 수행하는동안 지역변수들과 연산 결과 등을 저장함
메서드의 작업이 끝나면 메모리 공간은 반환되고 비워진다.
4. 호출스택
1 ) 정의 : 메서드의 작업에 필요한 메모리 공간을 제공
2 ) 특징 :
메서드 호출 : 메서드를 위한 메모리가 할당됨
메서드 종료 : 메모리 반환 , 자동제거
메서드 맨위 : 현재 실행중이며 나머지는 대기중
아래에 있는 메서드가 바로위 메서드를 호출한 것
5. 기본형 매개변수와 참조형 매개변수
기본형(8개) 매개변수 : 변수의 값을 읽기만 가능
참조형 매개변수 : 변수의 값을 읽고 변경 할수 있음.
6. static 메서드와 인스턴스 메서드
1 ) 인스턴스 메서드
- 인스턴스 생성후 ' 참조변수.메서드이름( )' 으로 호출
- 인스턴스 멤버 (iv,im) 와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수 (iv) 사용가능
2 ) 클래스 메서드 ( = static 메서드)
- 객체 생성없이 ' 클래스이름. 메서드 이름( )' 으로 호출
- 인스턴스 멤버와(iv,im) 관련없는 작을하는 메서드
- 메서드 내에서 인스턴스변수 (iv) 사용불가
1. 오버로딩
1 ) 정의 : 한 클래스에 같은 이름의 메서드 여러개
2 ) 조건 :
- 메서드 이름이 같아야한다
- 매개변수의 개수 또는 타입이 달라야한다
- 반환 타입은 영향이 없다.
2. 생성자
1 ) 정의 : 인스턴스가 생성될 때 마다 호출되는 ' 인스턴스(객체,iv묶음) 초기화 메서드 '
2 ) 조건 :
- 생성자 이름이 클래스 이름과 같아야함
- 리턴 값이 없다 (void 안붙임)
- 모든 클래스는 반드시 생성자를 가진다
3. 기본 생성자
- 클래스이름( ) { } ... (매개변수)도 { 하는일 } 도 없음
- 매개변수가 없는 생성자
- 생성자가 하나도 없을 때만 컴파일러가 자동으로 추가를 해줌
4. 매개변수가 있는 생성자
- 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할수 있게됨
- 인스턴스 생성후 인스턴스 변수에 값을 변경하는 것보다 이게 코드가 더 간결하다
4. 생성자 this( )
- 인스턴스 변수(iv)와 지역변수(lv)의 이름이 같을 때 구별하려고 사용
- this가 붙으면 iv이다 안붙인다면 매개변수와 가까운 lv가 된다
- 인스턴스 자신을 가르키는 참조변수 ( 객체 주소가 저장되어있음 )
- 인스턴스 메서드에서 사용, static 메서드에서는 사용이 불가
5. 변수의 초기화
- 멤버변수(iv,cv)는 자동으로 초기화
- 지역변수 (lv)는 우리가 수동으로 초기화
6. 멤버변수의 초기화와 시기 순서
1 ) 자동초기화 ∅
2 ) 간단초기화 =
3 ) 복잡 초기화 { } - 거의 사용하지않음
클래스 초기화 블럭 - 클래스가 처음 메모리에 올라갈 때 단 한번 초기화
인스턴스 초기화 블럭 - 인스턴스 생성될 때마다 실행된다
'First > Java' 카테고리의 다른 글
[Java] 6장 QUIZ (0) | 2023.03.21 |
---|---|
[Java] CH7 객체지향 개념 (0) | 2023.03.20 |
[Java] CH5 배열 (0) | 2023.01.15 |
[Java] CH4 조건문과 반복문 (0) | 2023.01.11 |
[Java] CH3 연산자 (Operator) (0) | 2023.01.05 |