6_Java_가변배열,추상화,필드,생성자

study/java · 2019. 11. 3. 12:06

연습문제(약점)

- 문자열 String[]에 하나씩 넣기

- 앞에 비교

 

가변배열

행의 개수는 정해져 있으나 각 행에 대한 열의 개수가 정해지지않은 2차우너배열

자료형 [][] 배열명 = new 자료형[행크기][];

ex)int[][] arr = new int[4][]

arr[0] = new int[3];

arr[1] = new int[4];

arr[2] = new int[5];

arr[3] = new int[2];

OOP

1. 객체지향언어

- 객체 지향의 특징

1. 캡슐화

 데이터의 직접 접근 제한, 정보은닉,코드보호(ex알약)

2. 상속

 부모꺼 가져다 쓰는거

3. 다형성

 형태를 바꿔나가는 것

 도형 = 삼각형, 사각형, 원형

4. + 추상화(abstraction)

 필요한 공통점 추출, 불필요한 공통점을 제거

 ex) 피카소그림;

 

객체

- 클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것

클래스

- 객체의 속성 기능에 대한 정의를 한 설계도

- 추상화(abstraction), 캡슐화(encapsulation)이 적용되어야함

클래스 다이어그램

---------------------------
Person
---------------------------
+ pNo : String
+ name : String
+ gender : char
+ address : String //접근제한자//변수명//타입
+ phone : String
+ age : int
---------------------------
+ Person() //생성자
---------------------------
+ setXXX() : void // 기능
+ getXXX() ; 각 자료형 //접근제한자//메소드명()//반환형
-------------------------------

MVC = Model View Controller

추상화

public class Person {

	// 필드 or 멤버변수(속성)
	// -> 클래스 영역에 선언되어지는 변수
	// class는 사용자 정의 자료형

	public String pNo; //주민등록번호
	public String name; //이름
	public char gender; //성별
	public String address; //주소
	public String phone; //전화번호
	public int age; //나이
}

호출부(메인속)

1. 생성

Person person = new Person();

자료형 변수명 heap영역에 Person객체생성

 

2. 자료넣기

person.pNo = "000101-1234567";
person.name = "홍길동";
person.gender = '남';
person.address = "서울시 중구 남대문로 120 대일빌딩 2층";
person.phone = "010-1234-5667";
person.age = 20;

3. 호출

System.out.println("주민번호 : " + person.pNo);
System.out.println("이름 : " + person.name);
System.out.println("성별 : " + person.gender);
System.out.println("주소: " + person.address);
System.out.println("전화번호 : " + person.phone);
System.out.println("나이 : " + person.age);

*객체(instance) 와  객체(Object)의 차이

instance는 class의 속성, 기능을 heap영역에 생성된 결과물

object는 실제로 존재하는 객체

 

클래스의 구조

클래스선언부 {

    // 필드(== 멤버변수)

    // 생성자

    // 메소드

}

캡슐화

 getter / setter 메소드로 간접접근

@setter의 구조
public void setName(String name) {
//pulibc void set필드명(필드의자료형 변수명(필드명))
this.name = name;
//this.필드명 = 변수명;
//필드name = //전달받은 name
}

@getter의 구조
public String getName() {
//public 반환형 get필드명()
return name;
//필드명
}

Class 접근 제한자 = public(전체) // (default)(같은패키지내)

필드(멤버변수)

[접근제한자] [예약어] class 클래스명 {
[접근제한자] [예약어] 자료형 변수명 [= 초기값];
}

필드 접근제한자

구분 해당 클래스 내부 같은 패키지 내 후손 클래스 내 전체
+ public o o o o
# protect o o o  
~ (default) 0 0    
- private 0      

 

필드예약어

1. static

같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며,

프로그램 start시에 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용

 

2. final

하나의 값만 계속 저장해야 하는 변수

상수는 항상 대문자

 

필드(Field) : 클래스 밑에 만드는 애들

C언어에서 말하는 '전역변수'와 비슷한 개념으로 해당 클래스내부

어디서든 접근 가능한 변수

+ 접근제한자 또는 예약어(static)에 따라 접근 범위 확장

 

지역변수

메소드, 생성자, 제어문 등의 블럭({}) 내부에서 선언된 변수

해당 선언된 블록 내에서만 사용 가능

생명주기 : 생성된 시점 ~ 해당 메소드가 종료되는 시점

 

필드의 종류

1. 멤버변수(== 인스턴스 변수)

생성 : new를 통해 인스턴스(객체) 생성 시 메모리에 할당

소멸 : 인스턴스(객체)가 소멸시 소멸

2. 클래스 변수(==static 변수)

--> static 예약어가 붙은 변수

생성 : 프로그램 실행 시 static 영역에 메모리 할당

소멸 : 프로그램 종료 시 소멸

 

필드 초기화 순서

클래스 변수(static변수)

JVM기본값 -> 명시적 초기값(선언) -> 클래스 초기화 블럭 초기값

 

인스턴스변수(멤버변수)

JVM기본값 -> 명시적 초기값(선언) -> 인스턴스 초기화 블럭 초기값 - > 생성자를통한초기값

 

생성자

생성자를 사용하는 목적

1. 객체를 생성해주기 위한 목적

2. 매개변수로 전달받은 값을 필드에 초기화할 목적

생성자 사용 시 주의 사항

1. 생성자명은 반드시 클래스명과 같아야 한다.

2. 반환형이 존재하지 않는다.

3. 매개변수 있는 생성자 작성 시 기본생성자를 반드시 작성해야 한다.

 --> JVM이 기본생성자를 자동 생성하지 못하기 때문

 

기본 생성자

[접근제한자] 클래스명() {}

보통 객체를 생성만 할 때 사용

--> 값 초기화 없이 틀만 만들어 두는것

만약 클래스 내부에 아무 생성자도 작성되지 않았다면

JVM이 자동으로 컴파일 코드에 생성해줌

 

매개변수생성자

[접근제한자] 클래스명(매개변수) {

    (this.)필드명 = 매개변수;

}

객체 생성과 동시에 매개변수로 전달된 값들을

해당 멤버변수에 초기화 하는 목적으로 사용