Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

백정탈의 개발 블로그

JAVA 공부 3일차 본문

자바

JAVA 공부 3일차

백정탈 2022. 10. 13. 17:19

 

Object 클래스

clone() 메소드

clone() 메소드는 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 반환합니다. 단지 필드의 값만을 복사하므로, 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다.

얕은 복사: 원본과 같은 객체를 공유하고 있다.

obj=super.clone();

깊은 복사: 원본과 다른 객체를 참조한다.

obj=super.clone();
circle c=(circle)obj;
import java.util.*;

 

class Car implements Cloneable {

    private String modelName;

①  private ArrayList<String> owners = new ArrayList<String>();


    public String getModelName() { return this.modelName; }                    // modelName의 값을 반환함

    public void setModelName(String modelName) { this.modelName = modelName; } // modelName의 값을 설정함

 

    public ArrayList getOwners() { return this.owners; }                      // owners의 값을 반환함

    public void setOwners(String ownerName) { this.owners.add(ownerName); }   // owners의 값을 추가함

 

    public Object clone() {

        try {

②          Car clonedCar = (Car)super.clone();

③          // clonedCar.owners = (ArrayList)owners.clone();

            return clonedCar;

④      } catch (CloneNotSupportedException ex) {

            ex.printStackTrace();

            return null;

        }

    }

}

 

public class Object03 {

    public static void main(String[] args) {

⑤      Car car01 = new Car();

        car01.setModelName("아반떼");

        car01.setOwners("홍길동");

⑥      System.out.println("Car01 : " + car01.getModelName() + ", " + car01.getOwners() + "\n");

 

⑦      Car car02 = (Car)car01.clone();

⑧      car02.setOwners("이순신");

⑨      System.out.println("Car01 : " + car01.getModelName() + ", " + car01.getOwners());

⑩      System.out.println("Car02 : " + car02.getModelName() + ", " + car02.getOwners());

    }

}
Car01 : 아반떼, [홍길동]

 

Car01 : 아반떼, [홍길동, 이순신]

Car02 : 아반떼, [홍길동, 이순신]

위의 코드를 실행하면 달라야할 각각의 Car01의 배열과 Car2의 배열이 같은것을 알수 있다. clone()을 통해 배열이나 인스턴스는 같은 주소를 참조 할 수 있다는 것 알수 있다. 이것을 방지 하지 위해 3번과 같은 배열을 복사하여 새로운 배열 주소를 만들어 주는것이다.

 

String 클래스

http://www.tcpschool.com/java/java_api_string

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

StringBuffer 클래스(가변 클래스) <-> String 클래스(불변클래스)

append() 메소드

append() 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가합니다.

 

capacity() 메소드

capacity() 메소드는 StringBuffer 인스턴스의 현재 버퍼 크기를 반환합니다.

기본 16바이트를 제공하고 capacity("JAVA")라고 쓰면 16+4=20 바이트가 된다. 

 

delete() 메소드

delete() 메소드는 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거합니다.

StringBuffer str = new StringBuffer("Java Oracle");

System.out.println("원본 문자열 : " + str);

 

① System.out.println(str.delete(4, 8));

System.out.println(str.deleteCharAt(1));

System.out.println("deleteCharAt() 메소드 호출 후 원본 문자열 : " + str);
원본 문자열 : Java Oracle

Javacle

Jvacle

deleteCharAt() 메소드 호출 후 원본 문자열 : Jvacle

insert() 메소드

insert() 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가합니다.

이때 전달된 인덱스가 해당 문자열의 길이와 같으면, append() 메소드와 같은 결과를 반환합니다.

StringBuffer str = new StringBuffer("Java 만세!!");

System.out.println("원본 문자열 : " + str);

 

① System.out.println(str.insert(4, "Script"));

System.out.println("insert() 메소드 호출 후 원본 문자열 : " + str);
원본 문자열 : Java 만세!!

JavaScript 만세!!

insert() 메소드 호출 후 원본 문자열 : JavaScript 만세!!

StringBuffer reverse()

해당 문자열의 인덱스를 역순으로 재배열함.

 

Math 클래스

random(), abs() 메소드, floor() 메소드, ceil() 메소드와 round(), max(), min(), pow(5,2)=25, sqrt(25)=5,

 

Wrapper 클래스

기본 타입의 데이터를 객체로 취급해야 하는 경우

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

인스턴스에 저장된 값의 동등 여부를 정확히 판단하려면 equals() 메소드를 사용

 

Enum 클래스

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }

values() 메소드: 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환

valueOf() 메소드:  valueOf() 메소드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환합니다.

 Rainbow rb=Rainbow.valueOf("Green")

 rb==Green;

ordinal() 메소드:   열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)를 반환

 int idx = Rainbow.YELLOW.ordinal();

 idx==2

 

Arrays 클래스

http://www.tcpschool.com/java/java_api_arrays

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

제네릭의 개념

이터의 타입(data type)을 일반화한다(generalize)는 것을 의미합니다.

제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법

타입 변수의 제한:  extends 키워드를 사용하면 타입 변수에 특정 타입만을 사용하도록 제한

class AnimalList<T extends LandAnimal & WarmBlood> { ... }  // implements 키워드를 사용해서는 안됨.

 

와일드카드

<?>           // 타입 변수에 모든 타입을 사용할 수 있음.

<? extends T> // T 타입과 T 타입을 상속받는 자손 클래스 타입만을 사용할 수 있음.

<? super T>   // T 타입과 T 타입이 상속받은 조상 클래스 타입만을 사용할 수 있음.

 

컬렉션 프레임워크

 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다

즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다.

 

인터페이스    설명                                                                                                  구현 클래스

List<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. Vector, ArrayList, LinkedList, Stack, Queue
Set<E> 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet, TreeSet
Map<K, V> 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음.
이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음.
HashMap, TreeMap, Hashtable, Properties

 

Iterator<E> 인터페이스 와 ListIterator<E> 인터페이스

 컬렉션에 저장된 요소를 읽어오는 방법

LinkedList<Integer> lnkList = new LinkedList<Integer>();

 

lnkList.add(4);

lnkList.add(2);

lnkList.add(3);

lnkList.add(1);

 

Iterator<Integer> iter = lnkList.iterator();

while (iter.hasNext()) {

    System.out.print(iter.next() + " ");

}

 

예외 처리(exception handling)

try {

    예외를 처리하길 원하는 실행 코드;

} catch (e1) {

    e1 예외가 발생할 경우에 실행될 코드;

catch (e2) {

    e2 예외가 발생할 경우에 실행될 코드;

}

...

finally {

    예외 발생 여부와 상관없이 무조건 실행될 코드;

}

Throw new Exception;은 구문은 강제로 예외를 발생시키는 구문이다.

 

checked와 unchedked RuntimeException의 자식클래스는 검사할 필요가 없고 그이외의 예외처리는 Try...catch를 사용하거나 throws exception을 사용하여 checked해줘야 한다. 

 

public class Exception04 {

    static void handlingException() throws Exception { throw new Exception(); }

 

    public static void main(String[] args) {

        try {

            handlingException();

        } catch (Exception e) {

            System.out.println("main() 메소드에서 예외가 처리됨!");

        }

    }

}
main() 메소드에서 예외가 처리됨!

'자바' 카테고리의 다른 글

JAVA 공부 1일차  (0) 2022.10.11