import java.util.Arrays;
public class ArrayTest6_Arrays {
public static void main(String[] args) {
// 배열관련 유틸리티 클래스
String [] kkk = {"xMan","Alex","XMan", "Bob","Curl"};
Arrays.sort(kkk);
for (String s : kkk) {
System.out.println(s);
}
//5. 검색
int idx = Arrays.binarySearch(kkk, "Alex");
System.out.println("idx==="+ idx);
int [] xyz = {9,4,3,12,55,63,2,3,190};
Arrays.sort(xyz);
for (int i : xyz) {
System.out.println("***"+i);
}
int [] a = {10,20};
int [] b = {10,20};
System.out.println(a==b);
System.out.println(Arrays.equals(a, b));
int [] num2 = { 10,20,30,40,50};
//2. 채워넣기
Arrays.fill(num2,100);
for (int i : num2) {
System.out.println("###"+i);
}
Arrays.fill(num2, 0, 3, 200);
for (int i : num2) {
System.out.println("!!!"+i);
}
//1. 배열복사
int [] xxx = Arrays.copyOf(num2, num2.length);
for (int i : xxx) {
System.out.println(">>>"+i);
}
int [] xxx2 = Arrays.copyOf(num2, 3);
for (int i : xxx2) {
System.out.println("2>>>"+i);
}
객체(object)란 1장에서 간단하게 살펴본 대로 실생활에서 주체(자신, subject)가 파악할 수
있는 모든 사물을 의미한다. 여러분 앞에 있는 컴퓨터, 책상, 책, 가방 등 모든 대상이 객체라고 할 수 있다. 모든 객체는 2가지 구성요소를 가질 수 있는데 하나는 객체의 특성을 표현할 수 있는 ‘속성’과 움직임을 표현하는 ‘동작’으로 구성된다. 특정 객체의 구성요소인 속성과 동작을 적절하게 추출하여 정의하는 것을 ‘객체 모델링’이라고 하며, 현실세계에서 추출한 객체(속성,동작)를 자바와 같은 프로그래밍 언어에서 적절하게 표현하여 프로그래밍할 수 있는데, 이러한 개발방법을 ‘객체지향 프로그래밍( Object Oriendted Programming: OOP )라고 한다. 즉, 가상세계에서 프로그래밍할 때 현실세계의 객체개념을 사용한다는 것이다. 하지만 모든 객체가 자바 프로그램을 개발할 때 필요한 것은 아니며 반드시 꼭 필요한 객체
들만을 추출해야 되는데 이것을 ‘객체 추상화’라고 한다.
object, instance
=> static, final , abstract
private - 같은 클래스 내에서만
protected
default - 같은 패키지 내에서만
public -
객체 생성시 멤버변수 초기값 지정가능
예를들면 기본생성자와 같은 이름이지만 매개변수를 다르게 주는 생성자를 또 생성할 수 있다.
생성자 영역 - 객체 생성시 멤버변수의 초기화 및 설정시 사용
객체 생성시 멤버변수 초기값 지정
모든 클래스에는 자동으로 기본 생성자가 생성되며 다음과 같이 파라미터없는 형식을 갖는다.
public class Student{
String name;
}
멤버변수 값의 초기화는 멤버변수에서도 할 수 있고 생성자에서도 할 수 있다.
기본생성자는 기재해주지 않아도 자동 생성되지만,
기본 생성자 외의 생성자가 하나라도 있다면, 시스템에서는 기본생성자를 필요로하지 않는다고 판단하여 자동 생성해주지 않는다.
따라서 필요한 경우에 명시적으로 작성해야함.
상속에서 상당히 중요해짐.
this()로 다른 오버로딩 생성자를 호출할 수 있지만 권장하지 않는 방식이다.
인자( argument ) 메서드 호출시 전달하는 값을 의미한다.
매개변수(parameter) 메서드 호출시 전달되는 인자값을 저장하는 변수를 의미한다.
[지정자] 리턴타입 메서드명 ([파라미터,...]){
//메서드가 처리하는 실행문
[return 결과값];
}
리턴값을 2개이상은 불가능하다.
(=리턴값은 무조건 하나여야함)
여러 데이터를 리턴하려면 배열 형태를 이용해야함.
매개변수로 객체를 받을 수 있음
리턴값으로 객체를 보낼 수 있음
아래는 메소드에서의 객체 받기, 보내기 예제
public void test7(Person p) {
System.out.println("test7 호출");
System.out.print(p.pname + "\t");
System.out.print(p.pgender + "\n");
}
public Person test8() {
System.out.println("test8 호출");
Person p = new Person("홍길동", "남");
return p;
}
아래 메소드에서 p변수는 test8메소드를 나가면 참조하는 변수가 사라지기 때문에 메모리에서 소멸된다.
객체 생성후 객체를 찍으면 주소가 출력된다.
주소가 출력되는 원리는 객체를 출력시 객체.toString();이 자동으로 실행되기 때문이다.
따라서 아래와 같이 클래스에서 toString을 오버로딩으로 재정의하면
public class Test {
public static void main(String[] args) {
Student s = new Student("A", 10, "서울", "1111");
System.out.println(s);
}
}
//toString 함수의 재정의 (오버라이딩)
public String toString() {
System.out.println("toString호출됨");
String msg = this.name+"\t"+this.age+"\t"+this.addr+"\t"+this.ssn;
return msg;
}
따라서 객체만 출력하면 toString이 나오는 성질을 이용해 객체만 찍어도 값을 볼 수 있게 재정의하면 정말 유용하고 자주 쓴다.
클래스에서 우클릭 -> source -> Generate toString()
class의 변수를 private으로 은닉화
값 변경이 불가능함
멤버변수 하나하나를 각자 접근할 수 있는 함수들이 필요함
변수당 설정하는 함수 꺼내가는 함수 2개씩 필요
인캡슐레이션
package com.test;
public class Student {
private String name;
private int age;
private String addr;
public Student(String name, int age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", addr=" + addr + "]";
}
// 3. 함수 영역
// 설정하는 함수 set 함수
// 가져오는 함수 get 함수
// setXXX 함수 영역
public void setName(String name) {
System.out.println("setName 호출");
this.name=name;
}
public void setAge(int age) {
System.out.println("setAge 호출");
this.age = age;
}
public void setAddr(String addr) {
System.out.println("setAddr 호출");
this.addr = addr;
}
//getXXX 함수 영역
public String getName() {
System.out.println("getName 호출");
return this.name;
}
public int getAge() {
System.out.println("getAge 호출");
return this.age;
}
public String getAddr() {
System.out.println("getAddr 호출");
return this.addr;
}
}
UML