-
7. Array , JavaBeans, 추상클래스program_language 및 궁금한것/Java 2019. 4. 16. 18:42
<배열> Array - 복수데이터
- 데이터 형이 동일한 자료에 같은(하나의) 변수명을 정의한 자료들의 집합.
- 첫번째 데이터 부터 인덱스(자동번호)가 부여0, 번지로 서로다른 데이터를 구분한다.
- 배열은 객체다. <-- 객체라는 것은 . 을 찍고 필드나 메소드를 사용할 수 있다.
- 맴버변수처럼 각방은 기본값이 정해져 있다.
- 배열의 크기가 정해지면 인덱스를 벗어나는 참조를 하면 안된다.
(ArrayIndexOutOfBoundsException! <-- 에러발생, 인덱스의 최대크기를 넘어서면 출력되는 것)
배열 선언 방법
1. 자료형[ ] 배열명 = { 데이터List(콤마로 구분되는 데이터) } ;
<- 배열선언과 동시에 데이터를 초기화(이미 데이터가 확정 되었을때 사용)
<- 주의: 배열선언과 데이터 초기화 하는 부분을 다로 작성할 수 없다.
2. 자료형[ ] 배열명 = new 자료형 [배열크기] ;
<- 값이 정해져 있지 않고 방만 만들어 놓는 것이다.
<- 프로그램 실행 도중 데이터 값을 입력할때(변경할때) 주로 사용한다.
<- 배열선언과 데이터 초기화 하는 부분을 다로 작성하는 것이 가능하다.
* 배열 객체 생성을 하게 되면 해당위치에 상관없이 각방에는 초기값이 부여된다.
(맴버변수 처럼 각 자료형의 기본값이 입력됨)
참고)
int[] su = { 11, 22, 33 }; <-- su라는 배열변수에 복수 데이터를 대입.
String[] str={ "길동","라임","주원" };
System.out.println(str) <--str은 레퍼런스를 참조하는 참조 변수이기 때문에 출력시 str의 주소값만 나온다.
장점: 관리가 편하다.
int[] arr; 과 int arr2[]; 의 차이점?
동일하다. 차이가 전혀 없다. 굳이 찾아보면 아래와 같은 선언부에 차이가 있다.
int[] arr, arr3, arr4; <-- arr, arr3, arr4는 배열
int arr2[],arr9; <-- arr2는 배열, arr9는 정수hello() 메소드 안에서는 값을 초기화를 해줘야 한다.
맴버변수는 기본값이 있지만, 지역변수는 기본값이 없기 때문에 초기화를 해주거나 값을 넣어줘야 한다.
class Q {
int i; // 기본값이 존재한다. 0
void hello() {
int j; // 기본값이 존재 xSystem.out.println( i ); // <-- 0이 출력된다.
System.out.println( j ); // <-------------------- 에러에러에러에러난다.
}
}
<자바빈즈> JavaBeans
- 서로 관련성 있는 속성을 묶어주는 클래스(객체)
- 내 식대로 이해를 하자면 편의성을 위해서 만든 참조 클래스 이다.
- 사용하는 곳에 따라 VO(Value Object) 또는 DTO(Data Transfer Object)라는 이름을 사용하기도 한다.
ex) 차의 색깔, 브랜드, 사이즈 등을 묶어주는 오브젝트가 자바빈즈
규칙)
1. 속성데이터(아래의 name, age, job등)를 private하게 선언 <-- private하기 때문에 자식도 없다. 외부사용불가능
(1번에서 끝나면 사용이 불가하기 때문에 쓰뤠기임)
2. 속성데이터를 선언한 클래스 내에 public 주고 받는 메소드(get,set)를 정의
3. public한 생성자, 오버로딩 생성자를 정의 할 수 있다.
4. 반드시 속성의 수와 일치하는 get,set이 정의되지 않아도 된다.
참고)
get으로 시작되는 메소드 들: 게터메소드(getter)
set으로 시작되는 메소드 들: 세터메소드(setter)
public class Person{
private String name;
private int age;
private String job;
public Person(){}
public Person(String name,int age,String job){
this.name=name;
this.age=age;
this.job=job;
}
public void setName(String name){
this.name=name;
} // 홍길동으로 세팅된 값을
public String getName(){
return name;
} // 메인에게 전달을 한다.
public void setAge(int age){
this.age=age;
}
}
=========main()==========
Person p= new Person();
p.name="홍길동"; <-- 이름정보 주기 : 에러발생
--> p.setName("홍길동); <-- 이름정보 주기: 실행OK
sysout( p.name); <-- 이름정보 받기 "홍길동"출력: 에러발생
--> sysout(p.getName()); <-- 이름정보 받기(얻기) "홍길동" 출력: 실행OK
리턴을 할때에 주의 사항
int su=300;
Abc a= new Abc();
return new Abc(); <-- 왜냐면 a= new Abc()니깐
<추상클래스> abstract class
- 후손 class를 제어할 목적으로 사용
- 객체화 될 수 없는 클래스 <--new를 못쓴다. 메모리 할당이 안된다.
- 구현(정의)된 메소드와 선언된 메소드로 구성
- 스스로 객체생성 불가(new 사용x), 후손 class 객체 생성(자식은 부모다!) 해서 사용
- 부모가 들어갈 수 있는 자리에 자식도 들어갈 수 있다.
형식)
abstract class 클래스명{
// 필드선언
public void hello() { } // 구현된(정의된) 메소드
abstract void print(); // 선언된 메소드
**주의: 선언된 메소드를 사용하는 경우 반드시 abstract 명시!
}
class 기본클래스 class 추상클래스 interface 인터페이스
{
// 정의(구현)된 메소드만! //선언된 메소드 // 선언된 메소드만
void hello() { } void hellow(); void hello();
// 정의 메소드
void goodBye(){}
}
}
** 정리
클래스는 객체생성해서 사용한다.
인터페이스는 클래스에 구현되서 사용된다. defind가 될 수 없다.
추상클래스는 자식클래스 객체 생성해서 사용한다.
** 메소드 정리
void m1(){} <-- 이름을 불러달라
- 항상 호출한 곳으로 이동한다.
void m2(int su){ } <-- 나를 호출할대는 인자값을 넣어주세요.
- 매개변수- 문장 - 리턴 순으로 데이터가 이동한다.
int m3(){ } <- 정수를 결과값으로 드릴게요
- 주소값만 돌려받는다.
메소드 코드 정리
123456789101112131415161718192021222324252627282930313233class Parent{ }class Child extends Parent{}--------------------------------------------<메소드 정의>public void hello(Child c){}public void goodBye(Parent p){//Parent p = new Child();}--------------------------------------------<메소드 호출>hello(new Child());Child cc = new Child();hello( cc );hello(new Parent()); ? (X) 자식객체에 부모객체가 들어갈 수 없다!!-----------------------------goodBye(new Parent());Parent pp = new Parent();goodBye( pp );goodBye(new Child()); ? (O)=====================================================================http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripterhttp://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs void a(String greeting) {
}
String b(int su) {
return "안녕하세요!";
}
int c() {
return 500;
}
--------------------
실행순서: c->b->a
a( b( c( ) ) )
--------------------
<라인 단위 입력>
BufferedReader <-- 메소드 readLine()
Reader r= new Reader(); (x) <-- 추상클래스 : 자식 <-- InputStreamReader
InputStream is = System.in
Reader r = new InputStreamReader(is)
BufferedReader br= new BufferedReader(r)
br<-- readLine ( ); // 줄을 구분자로 하는 text입력
BufferedReader br= new BufferedReader(new InputStreamReader(System.in);
new 생성자~!
반응형'program_language 및 궁금한것 > Java' 카테고리의 다른 글
8. 클래스 객체 생성, GC, static, NullpointException (0) 2019.04.18 if문과 case문의 성능비교 (0) 2019.04.18 6. 접근제한자와 this , Interface (0) 2019.04.15 이클립스 사용 단축키 (0) 2019.04.15 5. 자바의 객체 지향이란? (OOP) (0) 2019.04.12