본문 바로가기

콩's EDUCATION/콩's JAVA

[KITRI] 자바 6장 : 객체지향 프로그래밍 1차

6장. 객체지향 프로그래밍 1차


 

 

*클래스 생성 단계

 

1. 객체 정적/동적 특성 ; 코딩 단계가 아니다.

2. 클래스 정의 ; 코딩 단계

3. 객체(들) 생성 ; 코딩 단계

4. 객체 활용

 

TIP : Argument 활용 방법

class A{

public static void main(String[] args){

}

} ==> 체크 자동 선언 생성

 

JAVAC -- A.java(==> A.class 파일 자동생성)

java A ==> MAIN 찾아서 자동

java A 자바 프로그램 ==> A 클래스 실행 시점에서 2개 변수 입력

 

JAM 자동 실행 문장

args = new Stirng[2];

args[0] = "자바"

args[1] = "프로그램"

 

 

* 객체 생성

= 클래스 변수와 메소드 복사하여 메모리 저장

교육생 홍길동 = new 교육생();

 

객체 : 현실세계 명사(유형+무형) 모든 것 ==> 자바 S/W 단위 표현

객체 = object = instance

 

1. 객체 동적/정적 특성 파악

2. 클래스 정의 ; 정적/동적 동일 무수히 많은 객체 틀 (설계도, 원본)

 

클래스 ======= 인스턴스화 ======> 인스턴스(객체)

 

* 객체의 구성요소

속성(property) ; 멤버 변수, 특성, 필드, 상태

기능(function) ; 메소드, 행위, 함수

 

클래스 교육생{

메소드{

수강하다{..}

휴식하다{..}

점심먹다{..}

}

}

 

* 클래스 구성

 

[선언부]

[modifier] class 이름 [extends..][implements]

{

[멤버부]

멤버변수

메소드

생성자

}

 

* 클래스 구성요소

 

1. modifier 정의 ; 한정자, 수정자, 제한자 클래스나 변수, 메솓, 생성자 앞에 붙을 수 있으며 활용방법이나 접근(사용)권한 지정 역할 몇개의 키워드들

 

 

역할

 Modifier

 클래스 

 변수 

 메소드 

 생성자 

접근 권한 

 public

o

 o 

  o 

 o

 protected

x

o

 o

 o

 private

x

o

 o

 o

활용 방법 

 static 

 x 

 o 

 o

 x

 final

o

o

 o

 x

 abstract

 o 

x

 o

 x

기타

 

 

 transient

 volatile

 native

 synchronized

 

 

* 클래스 메모리 현 상태

 

TV mytv = new TV();

 

1. myTV 변수를 STACK 저장

2. NEW 연산; heap

3. 2번 결과(주소) 1번 대입

 

stack              heap; 100번지

mytv;100번지       power

volume

channel

setPower()

volumeUp()....

 

 

mytv > setPower()

 

객체 지향적 : 현실 객체(무수히 많은) 표현틀 정의

 

배열; 동일 타입의 여러가지 데이터 저장 묶음

구조체; 서로 다른 타입의 데이터 묶음

 

structure 회사원

int 사원

String 이름

double 급여

}

 

 

class ; 자바 서로 다른 타입의 데이터+기능 묶음

class 회사원{

int 사원

String 이름

double 급여

void 총급여계산(){}

}

 

회사원 변수타입; 자바 기본 제공 --> 없으면 사용자 정의한다.

 

* 클래스 관점

 

1. 현실객체

2. 데이터+기능

3. 사용자 정의

 

* 객체 생성

 

class A{   

int i = 10; ==> 메소드 외부; 멤버변수, 전체클래스 / 자동 초기화 (int ; 0)

= 객체 정적 특성 변수

void add(int k){==> 매개변수

int j = 20;  ==>  add 메소드의 지역변수, 메소드 내부 / 프로그래머 초기화

i+j;

}

void sub(){

i-j;

}

}

 

* 멤버, 지역 변수

 

 멤버변수 

class 변수 

 

 

 

지역변수

 메소드 내부 선언 

 

 메소드 매개변수

 

 

class 회사원{

static String 회사명 = "삼성";

.....

}

class 학생{

static String 학교명 = "한국대학교";

.....

}

 

* 메소드 규칙

 

class ...{

[modifier] 리턴타입 메소드명([매개변수]){

메소드 기능 구현 문장;

}

 

1. 동사/소문자 시작/두번째단

2. 숫자 시작 x, 예약어 x 

3. 대소문자 구분

4. 자바 모든 데이터 타입

int, double, boolean, char + 배열 + String + ...

 

* 리턴(return)타입

 

int test(){

int j=10;

return j*j;

}

class ATest{

public.. main(){

A al = new A();

int r1 = al.test();

 

* 매개변수

 

class ...{

[modifier] 리턴타입 메소드명(int j){

지역변수 선언

int i = 10; // 프로그래머 선언+값 초기화

메소드 기능 구현 ㅁ누장;

}

}

main 메소드 내부

메소드 명(10);

 

* 멤버부

 

멤버변수 ; 클래스전체, 객체 정적특성

- Non-static 멤버변수 : 각 객체마다 서로 다른 값 저장 변수

- static 멤버변수 ; 모든 객체 공통 1개 값 저장 변수(공유)

 

class 회사원{

회사명 = "";

}

class 학생{

학번

학교명

}

 

다른언어 ; 함수나 프로시저

 

* 매개변수

 

; 메소드 외부 전달 필요 변수

 

매개변수 전달원리?

 

1. 메소드

call by value ; 메소드 호출시 값 복사 전달

 

기본형 변수 매개변수 --> stack 실제값 저장

; 메소드 호출시 실제값 복사 전달

  이후에 메소드 내부에서 값이 i값이 변경되면 j값이 변경 없다.

 

addInt(int i){..}

==> 메소드 정의시점에서 형식, 순서, 갯수 정의 형식매개변수 정의

t.addInt(j);

==> 메소드 호출시점에서 j 실매개변수 전달

 

참조형 변수 매개변수 --> stack 주소값 저장

; 메소드 호출시 주소값 복사 전달

 

class A{
 int x = 10;
}

 void addA(A a1){
  System.out.println(a1.x++);
 }

 

  A a2 = new A();
  t.addA(a2);
  System.out.println(a2.x);

 

실매개변수(a2)를 형식매개변수(a1)로 주소값 복사 전달; a1,a2 동일 주소 객체 참조

 

형식매개변수 내부 포함 변수값(a1.x:10-->11) 변경하면 실매개변수 내부포함 변수값(a2.x:11) 변경된다.

 

* String

 

; 문자열 데이터에 자주 사용 되는 참조형 변수

String s1 = "abc";

String s2 = new String("abc");

String class ; api 제공, 문자열 제공 기본형 변수 타입 없다.

; new 키워드가 없어도 가능

s1.equals("+")

 

* 생성자 특징과 정의

 

1. 생성자 호출 위치 ; new 키워드 뒤 사용

2. 정의 내용 ; 객체생성시점 수행 문장 정의(보통 객체 변수값 초기화 문장)

3. 클래스 내부 "자동"으로 기본 생성자 정의

클래스이름(){ super(); }

 

4. 생성자 형태

 

[modifier] 클래스이름([매개변수]){

객체 생성 시점 수행 문장

}

 

5. 클래스 이름과 같다.

6. 리턴타입 없다.

7. 사용자 생성자 정의 가능, 기본생성자에 없는 매개변수 필요하거나 super() 문장 이외의 다른 문장 수행 필요

8. 기본 생성자 존재하는데도 사용자 생성자 정의 = 기본 생성자 필요없다.

그래서, 사용자 생성자 정의하면 기본 생성자 "자동" 삭제

9. this 키워드 ; 현재 자신 객체 의미 키워드

10. 멤버변수와 매개변수 이름이 같은 경우 구분

this.멤버변수

 

Employee e = new Employee(....);

 

1. e변수 Stack 저장

2. new Employee 변수와 메소드 복사 heap 저장

3. 생성자

4. 결과가 1번에 대입(주소)

 

* 생성자 오버로딩 가능

 

같은 클래스에 같은 이름의 생성자 여러개정의 매개변수 갯수나 타입이나 순서 중 하나 이상 다르게 정의

 

 

ch6.zip