출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

TreeSet<E> 클래스는 트리라는 자료구조를 기반으로 데이터를 저장한다.
데이터를 정렬된 순서로 저장하며, HashSet<E>와 마찬가지로 데이터의 중복저장 않는다.
정렬의 기준은 프로그래머가 직접 정의한다.

 

package Collection;

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest {

	public static void main(String[] args) {

		
		// Treeset : 트리 구조로 저장하는 자료구조. 2진트리

		// Treeset 인스턴스 생성
		TreeSet<Integer> tSet = new TreeSet<Integer>();
		

		tSet.add(1);
		tSet.add(5);
		tSet.add(2);
		tSet.add(4);
		tSet.add(3);
		tSet.add(2);
		
		System.out.println("Treeset 요소의 갯수 : " + tSet.size());
		
		Iterator<Integer> itr = tSet.iterator();
		
		while(itr.hasNext()){
			System.out.println(itr.next());
		}

	}

}

 

<출력>

 

Treeset 요소의 갯수 : 5
1
2
3
4
5

 

package Collection;

import java.util.Iterator;
import java.util.TreeSet;

public class Person implements Comparable<Person>{

	String name;
	int age;
	
	public Person(String name, int age) {
		this.name=name;
		this.age=age;
	}
	
	@Override
	public String toString() {
		return name+"("+age+")";
	}

	
	public int compareTo(Person o) {
//		if(age>o.age) {
//			return 1; // 양수반환 : 전달받은 객체의 값이 작을 때
//		}else if (age<o.age) {	
//			return -1; // 음수반환
//		}else {
		 // return age-o.age; // 작은수 > 큰수
		return o.age-age; // 큰수 > 작은수
	}
	
	

	

	public static void main(String[] args) {
		
		TreeSet<Person> tSet = new TreeSet<Person>();
		
		tSet.add(new Person("김태형", 24));
		tSet.add(new Person("박지민", 24)); // 그와중에 age가 같아서 중복이라 지워진다~~!!
		tSet.add(new Person("전정국", 23));
		tSet.add(new Person("김석진", 27));

		Iterator<Person> itr = tSet.iterator();
		
		while(itr.hasNext()) {
			System.out.println(itr.next());
			
		}
		
}
}

 

<출력>

 

김석진(27)
김태형(24)
전정국(23)

List<E>를 구현하는 클래스들과 달리 Set<E>를 구현하는 클래스들은 데이터의 중복저장을 허용하지 않는다.

(단, 동일 데이터에 대한 기준은 프로그래머가 정의)

 

 

package Collection;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest {

	public static void main(String[] args) {

		// HashSet 인스턴스 생성 : 인스턴스를 저장하기 위한 저장 공간 생성
		// set : 집합, 저장순서 유지하지않는다.
		
		Set<String> set = new HashSet<String>();
		
		set.add("First");
		set.add("Second");
		set.add("Third");
		set.add("First");   // 중복이라 저장되지 않는다.
		

		System.out.println("set 요소의 개수 : "+ set.size());
		
		Iterator<String> itr=set.iterator();
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}
	}

}

<출력>

 

set 요소의 개수 : 3
Second
Third
First

 

// Set<e>는 저장하는 순서를 가지지 않기 때문에 
// 일괄처리를 위해서는 Iterator<E> 인스턴스를 이용해서 처리한다.
// Collection<E>에는 Iterater() 메서드를 가지고 있고 Iterator<E>를 반환한다.

 

 

HashSet<E>클래스의 동등비교

String에는 Hashcode() 가 있어서 지 알아서 중복 분류해주지만 나머지는 해시코드를 만들어줘야한다

package Collection;

public class SimpleNumber {

	int num;

	public SimpleNumber(int num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return String.valueOf(num);
	}
	
}
package Collection;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SimpleNumberMain {

	public static void main(String[] args) {

		// set  인스턴스 생성		
		Set<SimpleNumber> set=new HashSet<SimpleNumber>();
		
		set.add(new SimpleNumber(10));
		set.add(new SimpleNumber(20));
		set.add(new SimpleNumber(10));
		
		System.out.println("Set 요소의 개수 : "+set.size());
		
		Iterator<SimpleNumber> itr = set.iterator();
		
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}

	}

}

<출력>

 

Set 요소의 개수 : 3
10
10
20

 

 

<SimpleNumber  수정>

쉬프트 알트 o > gernerate hashcode() and equals()

package Collection;

public class SimpleNumber {

	int num;

	
	// Set 동등 비교를 위한 Hashcode(), equals() 오버라이딩
	
	@Override
	public int hashCode() {
//		final int prime = 31;
//		int result = 1;
//		result = prime * result + num;
		return num%3; // 0 or 1 or 2
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) // 참조 주소값 == 전달받은 참조 주소값
			return true;
		if (obj == null) // 들어오는 객체가 null  ex) set.add(null)인 경우
			return false;
		if (getClass() != obj.getClass()) // 클래스 이름비교, 같은 타입인가
			return false;
		SimpleNumber other = (SimpleNumber) obj;
		if (num != other.num)
			return false;
		return true;
	}

	public SimpleNumber(int num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return String.valueOf(num);
	}
	
}

< 출력 >

 

Set 요소의 개수 : 2
10
20

반복자를 사용하면, 컬렉션 클래스의 종류에 상관없이 동일한 형태의 데이터 참조방식을 유지할 수 있다.
따라서 컬렉션 클래스의 교체에 큰 영향이 없다.
컬렉션 클래스별 데이터 참조 방식을 별도로 확인할 필요가 없다.

 

package Collection;

import java.util.ArrayList;
import java.util.Iterator;

public class IteraorTest {

	public static void main(String[] args) {
		
		ArrayList<String> list = new ArrayList<String>();
		
		list.add("First");
		list.add("second");
		list.add("Third");
		list.add("Fourth");
		
		// Iterator<E> 인스턴스 생성 : Iterator 메서드 호출
		System.out.println("요소 출력");
		
		Iterator<String> itr=list.iterator();
		
		//hasNext(), Next(), remove();
		while(itr.hasNext()) {
			String str=itr.next(); // hasNext(있다면)  str(받아서)
			System.out.println(str); // print(출력)
			
			if(str.compareTo("Third")==0) {
				itr.remove();
				
			}
		}
		
		System.out.println("요소 삭제 후 요소 출력");
		
		itr = list.iterator();
		while(itr.hasNext()) {
			System.out.println(itr.next());
		}
	}

}

'JAVA > basic' 카테고리의 다른 글

Map <K, V> / HashMap <K, V> key-value  (0) 2020.10.23
[ 컬렉션 Collection<E> ] TreeSet  (0) 2020.10.23
[ 컬렉션 Collection<E> ] HashSet  (0) 2020.10.23
[ 컬렉션 Collection<E> ] ArrayList  (0) 2020.10.23
[ 컬렉션 Collection<E> ] 컬렉션 프레임워크  (0) 2020.10.22
generic / 제네릭  (0) 2020.10.22
예외처리 / Exception  (0) 2020.10.21

ArrayList<E>의 단점 

• 저장소의 용량을 늘리는 과정에서 많은 시간이 소요된다. 
• 데이터의 삭제에 필요한 연산과정이 매우 길다. 

ArrayList<E>의 장점
• 데이터의 참조가 용이해서 빠른 참조가 가능하다.

// 근데 어차피 대부분 ArrayList를 쓴다고 한다 (❌LinkedList)

 

ArrayList<int> arr=new ArrayList<int>( ); error
LinkedList<int> link=new LinkedList<int>( ); error

기본 자료형 정보를 이용해서 제네릭 인스턴스 생성 불가능!
따라서 Wraper 클래스를 기반으로 컬렉션 인스턴스를 생성한다. (Int 말고 Integer⭕)

 

 

 

 

- ArrayList <어떤Type> 이름

 

형식 기능 
이름.get(index) index에 저장된 저장값 불러오기
이름.size 저장된 요소의 갯수
이름.remove(index) index에 저장된 것 삭제
이름.add(추가할값)
추가
이름.add(index, 추가할값)
index에 추가할 값을 추가 (그 뒤는 index 하나씩 알아서 뒤로 밀림)
이름.containts(어떤값) 어떤값이 추가하는지 true/false 반환
이름.set(index,수정값) index 자리에 있는 값을 수정값으로 수정
이름.indexOf(특정값) 특정값이 잇는 index를 반환
이름.isEmpty(); 값을 가지고 있으면 true 아니면 false
이름clear(); 모든 원소 삭제

 

package Collection;

import java.util.ArrayList;

public class ArrayListTest {

	public static void main(String[] args) {

		// 인스턴스 저장을 목적으로 하는 클래스
		// List<E> : 저장 순서 유지 (반복문이용 용이), 중복저장 허용

		//ArrayList<Integer> list = new ArrayList<Integer>();
		//List<Integer> list = new ArrayList(); 
		List<Integer> list = new ArrayList<Integer>();
		
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);

		System.out.println("list의 첫번째 요소의 값 : " + list.get(0));
		System.out.println("list 요소의 갯수 : " + list.size());

		System.out.println("list 출력");
		for (Integer i : list) {
			System.out.println(i);
		}
		
		// 삭제
		list.remove(2);
		
		System.out.println("삭제 후 list 출력");
		for (Integer i : list) {
			System.out.println(i);
		}
		
		
	}

}

<출력>

 

list의 첫번째 요소의 값 : 1
list 요소의 갯수 : 4
list 출력
1
2
3
4
삭제 후 list 출력
1
2
4

 

 

'JAVA > basic' 카테고리의 다른 글

[ 컬렉션 Collection<E> ] TreeSet  (0) 2020.10.23
[ 컬렉션 Collection<E> ] HashSet  (0) 2020.10.23
[ 컬렉션 Collection<E> ] Iterator  (0) 2020.10.23
[ 컬렉션 Collection<E> ] 컬렉션 프레임워크  (0) 2020.10.22
generic / 제네릭  (0) 2020.10.22
예외처리 / Exception  (0) 2020.10.21
예외처리 / throw  (0) 2020.10.21
package Friend;

import java.util.InputMismatchException;
import java.util.Scanner;

public class FriendInfoMain {

	public static void main(String[] args) {

		FriendInfoHandler handler = FriendInfoHandler.getInstance();
		Scanner sc = new Scanner(System.in);
		while (true) {
			try {
				System.out.println("** 메뉴선택 **");
				System.out.println(Number.INSERT + " : 입력");
				System.out.println(Number.SEARCH + " : 검색");
				System.out.println(Number.DELETE + " : 삭제");
				System.out.println(Number.ALLPRINT + " : 전체 정보 출력 ");
				System.out.println(Number.SIMPLEPRINT + " : 간단 정보 전체 출력 ");
				System.out.println(Number.EXIT + " : 종료 ");
				System.out.println("선택하세요 >>");
				
				int choice = oneSix();
				sc.nextLine();

				switch (choice) {
				case Number.INSERT:
					handler.addFriend();
					break;
				case Number.SEARCH:
					handler.searchInfo();
					break;
				case Number.DELETE:
					handler.deleteInfo();
					break;
				case Number.ALLPRINT:
					handler.showAllData();
					break;
				case Number.SIMPLEPRINT:
					handler.showAllSimpleData();
					break;
				case Number.EXIT:
					System.out.println("프로그램을 종료합니다.");
					return;
				}
			} catch (InputMismatchException | NumberRange e) {
				System.out.println("1에서 6사이의 숫자만 입력하세요");
				continue;
			}
		}
	}
		
		public static int oneSix() throws NumberRange{
			Scanner sc = new Scanner(System.in);
			int choice=sc.nextInt();			
			if(choice>=7 || choice<0) {
				NumberRange e = new NumberRange(choice);
				throw e;
			}
			return choice;
		} 

	

}
package Friend;

public class NumberRange extends Exception{
	
	int choice;
	
	public NumberRange(int choice) {
			}

}

컬렉션 프레임워크의 개념


컬렉션 프레임워크(collection framework)란?

자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다, 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다.  이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현됩니다.


컬렉션 프레임워크 주요 인터페이스

 

컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 다음과 같은 핵심이 되는 주요 인터페이스를 정의하고 있습니다.

 

1. List 인터페이스

2. Set 인터페이스

3. Map 인터페이스

 

이 중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의됩니다. 따라서 List 인터페이스와 Set 인터페이스의 공통된 부분을 Collection 인터페이스에서 정의하고 있습니다. 자바 컬렉션 프레임워크의 주요 인터페이스에 대한 더 자세한 사항은 다음 페이지를 참고하면 됩니다.

 

Java Documentation : The Collections Framework =>


주요 인터페이스 간의 상속 관계

자바에서 컬렉션 프레임워크를 구성하고 있는 인터페이스 간의 상속 관계는 다음 그림과 같습니다.

 

 

위의 그림에서 <E>나 <K, V>라는 것은 컬렉션 프레임워크를 구성하는 모든 클래스가 제네릭으로 표현되어 있음을 알려줍니다.

 


주요 인터페이스의 간략한 특징

 

자바에서 컬렉션 프레임워크를 구성하고 있는 주요 인터페이스의 간략한 특징은 다음과 같습니다.

 

 

List<E> 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. Vector, ArrayList, LinkedList, Stack, Queue
Set<E> 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet, TreeSet
Map<K, V>

키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음.

이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음.

HashMap, TreeMap, Hashtable, Properties

컬렉션 클래스(collection class)

 

컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스를 컬렉션 클래스(collection class)라고 합니다. 컬렉션 프레임워크의 모든 컬렉션 클래스는 List와 Set, Map 인터페이스 중 하나의 인터페이스를 구현하고 있습니다. 또한, 클래스 이름에도 구현한 인터페이스의 이름이 포함되므로 바로 구분할 수 있습니다. Vector나 Hashtable과 같은 컬렉션 클래스는 예전부터 사용해 왔으므로, 기존 코드와의 호환을 위해 아직도 남아 있습니다. 하지만 기존에 사용하던 컬렉션 클래스를 사용하는 것보다는 새로 추가된 ArrayList나 HashMap 클래스를 사용하는 것이 성능 면에서도 더 나은 결과를 얻을 수 있습니다. 다음 예제는 ArrayList 클래스를 이용하여 리스트를 생성하고 조작하는 예제입니다.

 

 

예제

import java.util.*;

public class Collection01 {

    public static void main(String[] args) {

        // 리스트 생성

        ArrayList<String> arrList = new ArrayList<String>();



        // 리스트에 요소의 저장

        arrList.add("넷");

        arrList.add("둘");

        arrList.add("셋");

        arrList.add("하나");



        // 리스트 요소의 출력

        for(int i = 0; i < arrList.size(); i++) {

            System.out.println(arrList.get(i));

        }

    }

}

실행 결과

 

하나


Collection 인터페이스

 

List와 Set 인터페이스의 많은 공통된 부분을 Collection 인터페이스에서 정의하고, 두 인터페이스는 그것을 상속받습니다. 따라서 Collection 인터페이스는 컬렉션을 다루는데 가장 기본적인 동작들을 정의하고, 그것을 메소드로 제공하고 있습니다.  Collection 인터페이스에서 제공하는 주요 메소드는 다음과 같습니다.

 

메소드설명

boolean add(E e) 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능)
void clear() 해당 컬렉션의 모든 요소를 제거함. (선택적 기능)
boolean contains(Object o) 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함.
boolean equals(Object o) 해당 컬렉션과 전달된 객체가 같은지를 확인함.
boolean isEmpty() 해당 컬렉션이 비어있는지를 확인함.
Iterator<E> iterator() 해당 컬렉션의 반복자(iterator)를 반환함.
boolean remove(Object o) 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능)
int size() 해당 컬렉션의 요소의 총 개수를 반환함.
Object[] toArray() 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함.

 


'JAVA > basic' 카테고리의 다른 글

[ 컬렉션 Collection<E> ] HashSet  (0) 2020.10.23
[ 컬렉션 Collection<E> ] Iterator  (0) 2020.10.23
[ 컬렉션 Collection<E> ] ArrayList  (0) 2020.10.23
generic / 제네릭  (0) 2020.10.22
예외처리 / Exception  (0) 2020.10.21
예외처리 / throw  (0) 2020.10.21
예외처리 / try-catch-finally  (0) 2020.10.21

1.

package generic;

public class Apple {

	private int weight; // 사과의 무게
	
	Apple(int weight){
		this.weight= weight;
	}
	
	public void showWeight() {
		System.out.println("사과의 무게 : " + weight);
	}
}
package generic;

public class Orange {

	private int sugarContent; // 오렌지 당도
	
	Orange(int sugar){
		this.sugarContent=sugar;
	}
	
	public void showsugarContent() {
		System.out.println("오렌지의 당도 : " + sugarContent);
	}
}
package generic;

public class AppleBox {
	
	Apple apple;
	
	public void store(Apple apple) {
		this.apple=apple;
	}
	
	public Apple PullOut() {
		return apple;
	}
}
package generic;

public class OrangeBox {
	
	Orange orange;
	
	public void store(Orange orange) {
		this.orange=orange;
	}
	
	public Orange PullOut() {
		return orange;
	}
}
package generic;

public class FruitBoxMain {

	public static void main(String[] args) {

		AppleBox appleBox = new AppleBox();
		appleBox.store(new Apple(10));
		Apple apple = appleBox.PullOut();
		
		apple.showWeight();
		
		OrangeBox orangeBox = new OrangeBox();
		// orangeBox.store(new String("오렌지"));
		orangeBox.store(new Orange(100));
		Orange orange = orangeBox.PullOut();
		
		orange.showsugarContent();
	}

}

2. 

fruitBox를 만들어서 사과와 오렌지를 각각 집어넣어줄 수 있지만,

아무거나 들어가도 빨간줄이 생기지 않지만, 실행하면 에러가 난다.

package generic;

public class FruitBox {
	
	Object fruit;
	
	public void store(Object fruit) {
		this.fruit=fruit;
	}
	
	public Object PullOut() {
		return fruit;
	}

}

 

package generic;

public class FruitBoxMain {

	public static void main(String[] args) {

		
		FruitBox box1 = new FruitBox();
		box1.store(new Apple(100));
		Apple apple = (Apple)box1.PullOut();
		apple.showWeight();
		
		FruitBox box2 = new FruitBox();
		box2.store("Apple"); // Apple 타입만 들어가야 한다. (아무거나 들어가도 ㅇㅋ인게 문제점..)
		Orange orange = (Orange)box2.PullOut();//형변환
		orange.showsugarContent();
		
	}

}

3.

제네릭을 이용해 FuritBox<T>를 생성해주면

형변환도 필요없고 알아서 올바르지 않은 타입이 들어가면 빨간줄이 생긴다.

package generic;

public class FruitBox <T> { // T > Apple / Orange
	
	T fruit; // Apple fruit
	
	public void store(T fruit) { // store(Apple fruit)
		this.fruit=fruit;
	}
	
	public T PullOut() { // public Apple PullOut()
		return fruit;
	}

}
package generic;

public class FruitBoxMain {

	public static void main(String[] args) {

		
		FruitBox<Apple> box1 = new FruitBox<Apple>();
		// box1.store("Apple"); 에러남
		box1.store(new Apple(10));
		Apple apple = box1.PullOut();
		apple.showWeight();
		
		FruitBox<Orange> box2 = new FruitBox<Orange>();
		// box2.store(new Apple(10)); // Orange만 들어갈 수 있게 됨
		box2.store(new Orange(100));		
		Orange orange = box2.PullOut(); //형변환도필요없다.
		orange.showsugarContent();
		
	}

}

4.

FruitBox<T>에 초기화 생성자를 추가하면 더욱 편리하다.

package generic;

public class FruitBox<T> { // T > Apple / Orange
	
	T fruit; // Apple fruit
	
	FruitBox(T fruit){   // FruitBox(Apple fruit){
		this.fruit=fruit;
		
	}
	
	public void store(T fruit) { // store(Apple fruit)
		this.fruit=fruit;
	}
	
	public T PullOut() { // public Apple PullOut()
		return fruit;
	}

}
package generic;

public class FruitBoxMain {

	public static void main(String[] args) {

		
		FruitBox<Apple> box1 = new FruitBox<Apple>(new Apple(10));
		Apple apple = box1.PullOut();
		apple.showWeight();
		
		FruitBox<Orange> box2 = new FruitBox<Orange>(new Orange(100));
		Orange orange = box2.PullOut(); //형변환도필요없다.
		orange.showsugarContent();
		
	}

}
package Basic;

import java.util.StringTokenizer;

public class Token {

	public static void main(String[] args) {

		String s="11:22:33:44:55";
		StringTokenizer st = new StringTokenizer(s, ":");
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
				
	}

}

11
22
33
44
55

 

import java.util.StringTokenizer;

public class Token {

	public static void main(String[] args) {
		

		System.out.println("-----------------------1번");
		String a = "11:22:33:44:55";
		StringTokenizer t = new StringTokenizer(a, ":"); // ":"가 true이면 출력
		while (t.hasMoreTokens()) {
			System.out.println(t.nextToken());
		}
		
		
		System.out.println("-----------------------2번");
		String s = "11:22:33:44:55";
		StringTokenizer st = new StringTokenizer(s, ":", true); // ":"가 true이면 출력
		while (st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
		

		System.out.println("-----------------------3번");
		String pNum = "Tel 82-010-1234-5678";
		StringTokenizer st1 = new StringTokenizer(pNum);

		while (st1.hasMoreTokens()) {
			System.out.println(st1.nextToken());
		}

		
		System.out.println("-----------------------4번");
		StringTokenizer st2 = new StringTokenizer(pNum, " -"); // 구분자는 "-" " " 로 처리
		while (st2.hasMoreTokens()) {
			System.out.println(st2.nextToken());
		}

		
		System.out.println("-----------------------5번");
		StringTokenizer st3 = new StringTokenizer(pNum, "- ", true);
		while (st3.hasMoreTokens()) {
			System.out.println(st3.nextToken());
		}

	}

}

 

-----------------------1번
11
22
33
44
55
-----------------------2번
11
:
22
:
33
:
44
:
55
-----------------------3번
Tel
82-010-1234-5678
-----------------------4번
Tel
82
010
1234
5678
-----------------------5번
Tel
 
82
-
010
-
1234
-
5678

 

 

package Basic;

import java.math.BigDecimal;

public class BigDecimalTest {

	public static void main(String[] args) {

		
		double d1= 1.6;
		double d2= 0.1;
		System.out.println("d1 : " + d1);
		System.out.println("d2 : " + d2);
		System.out.println("d1 + d2 : "+ (d1+d2));
		System.out.println("d1 * d2 : "+ (d1*d2));
		
		BigDecimal e1 = new BigDecimal("1.6");
		BigDecimal e2 = new BigDecimal("0.1");
		
		System.out.println("두 실수의 덧셈결과: "+ e1.add(e2));
		System.out.println("두 실수의 곱셈결과: "+ e1.multiply(e2));
	}

}
​

 

최대 정수 표현 : 9223372036854775807
최소 정수 표현 : -9223372036854775808
덧셉 : -8999999999999999999999999
곱셈 : -9999999999999999999999999000000000000000000000000

 

package Basic;

import java.math.BigInteger;

public class BigIntergerTest {

	public static void main(String[] args) {

		System.out.println("최대 정수 표현 : " + Long.MAX_VALUE);
		System.out.println("최소 정수 표현 : " + Long.MIN_VALUE);
		
		BigInteger bigValue1 = new BigInteger("1000000000000000000000000");
		BigInteger bigValue2 = new BigInteger("-9999999999999999999999999");
		
		BigInteger addResult = bigValue1.add(bigValue2);
		BigInteger mulResult = bigValue1.multiply(bigValue2);
		
		System.out.println("덧셉 : " + addResult);
		System.out.println("곱셈 : " + mulResult);

	}

}

 

d1 : 1.6
d2 : 0.1
d1 + d2 : 1.7000000000000002
d1 * d2 : 0.16000000000000003
두 실수의 덧셈결과: 1.7
두 실수의 곱셈결과: 0.16

 

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
32
33
34
public class Wrapper1 {
 
    public static void main(String[] args) {
 
        Integer i1 = new Integer(100); // 인스턴스생성
        Integer i2 = new Integer(100); // 인스턴스 생성
        
        System.out.println("참조변수의 비교 : " + (i1==i2)); // 참조값비교
        System.out.println("저장값 비교 : " + i1.equals(i2)); // 저장값 비교
        
        System.out.println("il.toString() : "+ i1.toString());
        System.out.println("i2.toString() : "+ i2.toString());
        
        System.out.println("Integer.MAX_VALUE : " +Integer.MAX_VALUE);
        System.out.println("Integer.MIN_VALUE : "+Integer.MIN_VALUE);
        System.out.println("Type : " + Integer.TYPE);
        System.out.println("Siez : " + Integer.SIZE);
    
        
        int num = i2.intValue();
        System.out.println("int num = i2.intValue();" + num); 
        
        int num2=Integer.parseInt("10"); //String>int
        num2+=1;
        System.out.println("num2 : " + num2);
        
        // String > integer , int > integer        
        Integer i3 = Integer.valueOf("10");
        int num3=i3.intValue();
        System.out.println("num3 : " + num3);
        
    }
 
}
cs
참조변수의 비교 : false
저장값 비교 : true
il.toString() : 100
i2.toString() : 100
Integer.MAX_VALUE : 2147483647
Integer.MIN_VALUE : -2147483648
Type : int
Siez : 32
int num = i2.intValue();100
num2 : 11
num3 : 10​

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public static void main(String[] args) {
 
        Integer iValue=10// autoboxing
        // Integer iValue=new Integer(10)
        // Integer iValue=Integer.valueOf(10)
        Double dValue=3.14;
        //Double dValue=new Double(3.14)
        //Double dValue=Double.valueOf(3.14)
        
        System.out.println(iValue); // iValue.toString()
        System.out.println(dValue); // dValue.toString()
        
        int num1=iValue; // Integer > int Auto unboxing
        double num2= dValue;
        
        System.out.println(num1);
        System.out.println(num2);
 
    }
 
}
    
cs
10
3.14
10
3.14

예외클래스

docs.oracle.com/javase/8/docs/api/java/lang/Exception.html

Exception
    |
    |--- IOException
    |--- ClassNotFoundException
    |--- ...
    |--- RuntimeException
            |--- ArithmeticException
            |--- ClassCastException
            |--- NullPointerException
            |--- ...
            |--- IndexOutOfBoundsException
InputMismatchException 타입이 맞지 않을때 ex) int 인데 숫자가 아닌 다른 것이 입력되었을 때
ArithmeticException 산술연산 에러 ex) 나누는 수가 0일 때 (10/0)
NullPointerException 참조값이 없는 경우
ArrayIndexOutOfBoundsException 배열의 범위에서 인덱스 값을 벗어난 경우
ClassCastException 적절치 못하게 클래스를 형변환 하는 경우
NegativeArraySizeException 배열의 크기가 음수값인 경우
OutOfMemoryException 사용 가능한 메모리가 없는 경우
NoClassDefFoundException 원하는 클래스를 찾지 못한 경우
NumberFormatExcpeion 문자열을 숫자로 변경할 때 숫자가 변환될 수 없는 문자가 포함되어있음
실행 예외 (RuntimeException)
  • 예외가 발생하면 JVM은 해당하는 실행 예외 객체를 생성
  • 실행 예외는 컴파일러가 예외 처리 여부를 확인하지 않음. 따라서 개발자가 예외 처리 코드의 추가 여부를 결정
  • 대표적인 실행 예외 예
실행 예외 발생 이유
ArithmeticException 0으로 나누기와 같은 부적절한 산술 연산을 수행할 때 발생
IllegalArgumentException 메서드에 부적절한 인수를 전달할 때 발생
IndexOutOfBoundsException 배열, 벡터 등에서 범위를 벗어난 인덱스를 사용할 때 발생한다.
NoSuchElementException 요구한 원소가 없을 때 발생한다.
NullPointerException null 값을 가진 참조 변수에 접근할 때 발생한다.
NumberFormatException 숫자로 바꿀 수 없는 문자열을 숫자로 변환하려 할 때 발생한다.
일반 예외
  • 컴파일러는 발생할 가능성을 발견하면 컴파일 오류를 발생
  • 개발자는 예외 처리 코드를 반드시 추가
  • 대표적인 일반 예외 예
일반 예외 발생 이유
ClassNotFoundException 존재하지 않는 클래스를 사용하려고 할 때 발생한다.
InterruptedException 인터럽트 되었을 때 발생한다.
NoSuchFieldException 클래스가 명시한 필드를 포함하지 않을 때 발생한다.
NoSuchMethodException 클래스가 명시한 메서드를 포함하지 않을 때 발생한다.
IOException 데이터 읽기 같은 입출력 문제가 있을 때 발생한다.

 

'JAVA > basic' 카테고리의 다른 글

[ 컬렉션 Collection<E> ] ArrayList  (0) 2020.10.23
[ 컬렉션 Collection<E> ] 컬렉션 프레임워크  (0) 2020.10.22
generic / 제네릭  (0) 2020.10.22
예외처리 / throw  (0) 2020.10.21
예외처리 / try-catch-finally  (0) 2020.10.21
인터페이스 / interface / implements  (0) 2020.10.20
추상클래스 / abstract class  (0) 2020.10.20
Throwable 클래스의 주요 메서드
메서드 설명
public String getMessage() Throwable 객체의 자세한 메시지를 반환한다.
public String toString() Throwable 객체의 간단한 메시지를 반환한다.
public void printStackTrace() Throwable 객체와 추적 정보를 콘솔 뷰에 출력한다.

프로그래머가 직접 정의하는 예외의 상황

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
package FirstJava;
 
public class ExcepthionThrow {
 
    public static void main(String[] args) {
        
        
        try {
            
            
            // 프로그래머가 강제로 예외를 발생시킨다.
            // 예외 클래스의 인스턴스 생성
            Exception e = new Exception("강제로 발생한 예외");
            // 예외발생
            throw e;
            
        }catch (Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace(); // 예외발생 순서
        }
        System.out.println("프로그램 종료");
    }
 
}
 
cs

예제1)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package FirstJava;
 
public class AgeInputException extends Exception{
    
    int age;
    
    public AgeInputException(int age) {
        super("유효하지 않은 나이가 입력되었습니다");
        this.age=age;
    }
 
    @Override
    public String toString() {
        return "AgeInputException [age=" + age + ", getMessage()=" + getMessage() + "]";
    }
 
 
 
}
 
cs
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
32
33
34
35
package FirstJava;
 
import java.util.Scanner;
 
public class ProgrammerDefineException {
 
    public static void main(String[] args) throws AgeInputException {
 
        System.out.println("나이를 입력하세요");
        try {
        int age = readAge();
        System.out.println("나이는 "+ age + "세 입니다.");
        } catch(AgeInputException e) {
            System.out.println(e); // tostring()
        }
    
 
    }
 
    public static int readAge() throws AgeInputException{
        //throws AgeInputException
        //readAge 메서드 내에서 발생하는 예외중에
        //AgeInputException 타입의 예외가 발생하면
        //readAge()메서드를 호출한 쪽으로 전달
        Scanner sc = new Scanner(System.in);
        int age=sc.nextInt();
        // 논리적인 오류에 대한 예외 발생
        if(age<=0) {
            AgeInputException ae=new AgeInputException(age);
            throw ae;
        }
        return age;
    }
}
 
cs

 

  • if else와 달리 try-catch는 블럭내에 포함된 문장이 하나여도 {} 를 생략할 수 없다.
  • try 블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 여러개의 catch블럭을 사용할 수 있다.
  • catch 내에 또 다른 try-catch 블럭을 사용할 수 있는데 이때는 다음과 같이 변수 e를 중복해서 사용할 수 없다.
  • 하나의 try 문에서 여러 개의 예외가 발생할 수 있지만 동시에 발생하지는 않음
  • 하나의 예외가 발생하면 즉시 try 블록의 실행을 멈추고 해당 catch 블록으로 이동
  • 예외 발생 여부와 관계없이 무조건 수할 실행문이 있다면 try~catch 문에 finally 블록 추가
  • 다중 catch 블록일 때 try 블록에서 예외가 발생하면 발생한 예외를 catch 블록 순서대로 비교
  • 앞에 있는 catch 블록의 예외 객체가 나중 catch 블록 예외 객체의 부모라면 앞에 있는 catch 블록이 먼저 가로챔 -> 컴파일러는 오류를 발생시킴
  • 구체적인 예외를 먼저 처리해야 함.

 

  • printStackTrace(): 예외발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
  • getMessage(): 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

Try-catch 문의 실행순서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
class ExceptionEx {
    public static void main(String args[]) { // 0으로 나눠서 고의로 ArithmeticException을 발생시킨다.
        System.out.println("try~catch 실행 순서");
        System.out.println(1);
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0 / 0);
            System.out.println(4); // 실행되지 않는다.
        } catch (ArithmeticException ae) {
            System.out.println(5);
        } // try-catch의 끝
        System.out.println(6);
    } // main메서드의 끝
}


cs

rebeccacho.gitbooks.io/java-study-group/content/chapter8.html

 

Chapter 8 예외처리(Exception Handling) | Java Study Group

 

rebeccacho.gitbooks.io

butter-shower.tistory.com/87

 

[Java] 예외처리 - try~catch 문, throws문, 예외의 종류

오류의 종류 에러 (Error) 개발자가 해결할 수 없는 치명적인 오류 하드웨어의 잘못된 동작 또는 고장으로 인한 오류 에러가 발생되면 프로그램 종료 정상 실행 상태로 돌아갈 수 없음 예외 (Excepti

butter-shower.tistory.com

'JAVA > basic' 카테고리의 다른 글

generic / 제네릭  (0) 2020.10.22
예외처리 / Exception  (0) 2020.10.21
예외처리 / throw  (0) 2020.10.21
인터페이스 / interface / implements  (0) 2020.10.20
추상클래스 / abstract class  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
상속 / extends  (0) 2020.10.15

A instanceof B

참조변수 A

Type B

A가 B로 변환이 가능한가

True / False

 

 

  • 일종의 추상클래스, 추상클래스보다 추상화 정도가 높다
  • 실제로 구현된 것이 전혀 없는 기본 설계도
  • 추상메서드와 상수만을 멤버로 가질 수 있다
  • 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 작성
  • 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용된다.
  • 클래스처럼 상속 가능 / 다중상속 허용
  • Object클래스와 같은 최고 조상이 없다

 

예제1

 

예제2) 인터페이스 내에 선언된 변수는 무조건 public static final로 선언된다.

원래 case 1: case 2: - 같은 형식이었는데 좀 더 알아보기 쉽게 이렇게 바꿀 수도 있다.

 

예제2

 

 

 

인터페이스를 이용한 마킹의 효과

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package Oct17;
 
public class interfaceMark {
 
    public static void main(String[] args) {
 
        PointOne pos1 = new PointOne(11);
        PointTwo pos2 = new PointTwo(22);
        PointOne pos3 = new PointOne(33);
        PointTwo pos4 = new PointTwo(44);
        String test = "test";
        
        ClassPrinter.print(pos1);
        ClassPrinter.print(pos2);
        ClassPrinter.print(pos3);
        ClassPrinter.print(pos4);
        ClassPrinter.print(test);
    }
 
}
 
interface UpperCasePrintable {
    // 마킹하려고하는 건 거의 ~able로 이름을 만듦
 
}
 
class PointOne implements UpperCasePrintable {
    private int xPos;
    private int yPos;
 
    PointOne(int x, int y) {
        this.xPos = x;
        this.yPos = y;
 
    }
 
    @Override
    public String toString() {
        return "[x pos: " + xPos + ", y pos : " + yPos + "]";
    }
}
 
class PointTwo {
    private int xPos;
    private int yPos;
 
    PointTwo(int x, int y) {
        this.xPos = x;
        this.yPos = y;
    }
 
    @Override
    public String toString() {
        return "[x pos: " + xPos + ", y pos : " + yPos + "]";
    }
 
}
 
class ClassPrinter {
    public static void print(Object obj) {
        String str=obj.toString();
        
        // UppercasePrintable 형변환가능여부를 확인 > 대문자로 변경
        if(obj instanceof UpperCasePrintable) {
            str = str.toUpperCase();
        }
        
        System.out.println(str);
            
    }
}
cs

 

 

 

 

'JAVA > basic' 카테고리의 다른 글

예외처리 / Exception  (0) 2020.10.21
예외처리 / throw  (0) 2020.10.21
예외처리 / try-catch-finally  (0) 2020.10.21
추상클래스 / abstract class  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
상속 / extends  (0) 2020.10.15
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15

 클래스가 설계도라면 추상클래스는 ‘미완성 설계도’ 

  • 완성된 설계도가 아니므로 인스턴스를 생성할 수 없다.  
  • 다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다
  • 일반 메서드가 추상메서드를 호출할 수 있다 (호출 시 선언부 필요)
  •  

 

'JAVA > basic' 카테고리의 다른 글

예외처리 / throw  (0) 2020.10.21
예외처리 / try-catch-finally  (0) 2020.10.21
인터페이스 / interface / implements  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
상속 / extends  (0) 2020.10.15
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15

//출력

볼륨 크기 : 0
베이스의 크기 0

 

 

super 키워드를 넣으면 원래기능도 함께 할 수 있다.

 

@override 

주해(annotation)를 사용하면 컴파일러에게 수퍼 클래스의 메소드를 오버라이드 하려고 한다는 것을 알려줄 수 있다.

만약 컴파일러가 수퍼 클래스에 그러한 메소드가 존재하지 않는다는 것을 감지하면 오류를 알려준다

만약에 ShowCurrentState()라고 오타를 내면 오버라이딩이 아니라 새로운 메서드가 생성되어버리는데,

ShowCurrentState()가 존재하지 않아서 문제 있다고 알려준다. ㄳㄳ

 

오버라이딩의 조건   

1. 선언부가 같아야 한다.(이름, 매개변수, 리턴타입)   

2. 접근제어자를 좁은 범위로 변경할 수 없다. 

- 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로 만 변경할 수 있다. 

ex) BaseEnSpeaker에서 클래스에서  Private void showCurrentState()로 생성불가

    (조상메서드는 default이므로)

3. 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다. 

 

오버로딩과 오버라이딩

 

오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것 (New)

오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (Change, Modify)

 

 

 

 

'JAVA > basic' 카테고리의 다른 글

예외처리 / try-catch-finally  (0) 2020.10.21
인터페이스 / interface / implements  (0) 2020.10.20
추상클래스 / abstract class  (0) 2020.10.20
상속 / extends  (0) 2020.10.15
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15

class 자손클래스 extends 조상클래스/부모클래스

▶ 상속이란? 

- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.

- 두 클래스를 조상과 자손으로 관계를 맺어주는 것.

- 자손의 멤버개수는 조상보다 적을 수 없다.(같거나 많다.)

 

- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.

- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.

 

  • 여기서 중요한 사실은 하위클래스의 생성자 내에서 상위클래스의 생성자호출을 통해서 상위 클래스의 인스턴스 멤버를 초기화 한다는 점이다!
  • 하위 클래스의 생성자는 상위클래스의 인스턴스 변수를 초기화할 데이터까지  자로 전달받아야 한다!
  • 하위 클래스의 생성자는 상위 클래스의 생성자 호출을 통해서 상위 클래스의  스턴스 변수를 초기화한다!
  • 키워드 super는 상위 클래스의 생성자 호출에 사용된다. Super와 함께 표시된 전달되는 인자의 수와 자료형을 참조하여 호출할 생성자가 결정 된다!

Child2에서는 새로운 String 변수를 추가해줌 (name)

GrandChild에서는 부모클래스인 Child2의 변수 name을 사용하기 위해 super를 사용함.

여기서 super는 Child2를 의미한다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package Oct15;
 
public class CarMain {
 
    public static void main(String[] args) {
        
        //클래스멤버도 상속의 대상이다. 클래스 멤버는 한번만 생성/ 자손클래스의 이름으로도 참조, 호출이가능하다.
        System.out.println(Car.name);
        System.out.println(HybridCar.name);
        
        Car car1 = new Car(100);
        HybridCar car2 = new HybridCar(100,50);
        HybridWaterCar car3 = new HybridWaterCar(100,50,20);
 
        car3.showCurrentGauge();
    }
 
}
 
class Car {
    static String name="뽀카";
    int gasolinegauge;
    // car(){}
    
    Car(){
        
    }
    Car(int gasolinegauge){
        this.gasolinegauge=gasolinegauge;
    }
}
 
class HybridCar extends Car {
 
    int electronicGauge;
    /*
      HybridCar(){
       super();
        }
     */                              // Car(){}가 없다면 상위클래스 생성자에 필요한 것을 넣어줘야함
    
    HybridCar(int gasolinegauge, int electronicGauge){
        // 조상 클래스의 멤버를 초기화하는 생성자 호출
        // super(gasolinegauge);  // 조상클래스super는 꼭 첫줄에!
        super();
        // 새롭게 정의한 Hybrid 클래스의 멤버를 초기화해줌
        this.electronicGauge=electronicGauge;
        
    }
 
    
}
 
class HybridWaterCar extends HybridCar {
    /*
      
      HybridWaterCar()
      { super(); 
      }
     
     */
    HybridWaterCar(int gasolinegauge, int electronicGauge, int watergauge){
        super(gasolinegauge, electronicGauge);
        this.waterGauge=watergauge;
    }
    
    
    int waterGauge;
 
    public void showCurrentGauge() {
        System.out.println("잔여 가솔린 : " + gasolinegauge);
        System.out.println("잔여 전기 : " + electronicGauge);
        System.out.println("잔여 water : " + waterGauge);
    }
}
cs

'JAVA > basic' 카테고리의 다른 글

인터페이스 / interface / implements  (0) 2020.10.20
추상클래스 / abstract class  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
import  (0) 2020.10.15

객체 중에는 전체 시스템을 통틀어 딱 하나만 존재해야 하는 것들이 있다.

그럴 때 이용하는 싱글턴/톤 패턴

 

'JAVA > basic' 카테고리의 다른 글

추상클래스 / abstract class  (0) 2020.10.20
오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
상속 / extends  (0) 2020.10.15
getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
import  (0) 2020.10.15
배열과 메소드  (0) 2020.10.13

Getter 와 Setter 메서드 : 

  1. getter메서드
    • 반드시 소문자 get을 접두사로 사용 
    • get다음에 이어지는 단어의 첫번째 글자는 반드시 대문자로 작성
    • 반드시 리턴값이 있어야 한다 (void 불가)
    • 매개변수가 없어야 한다.
  2. setter메서드
    • 반드시 소문자 set을 접두사로 사용
    • set다음에 이어지는 단어의 첫번째 글자는 반드시 대문자로 작성
    • 반드시 리턴값이 없어야 한다 (반드시 void형 이어야 한다)
    • 반드시 매개변수가 있어야한다

hsprnote.blogspot.com/2017/03/java-getter-setter.html

 

JAVA - getter / setter 메서드

일반적으로 클래스에 선언된 맴버변수를 외부에서 수정하려면 인스턴스를 생성후 해당 변수명을 호출해와 직접적으로 수정해줬다. 하지만 위와 같은 방법으로 맴버변수값을 변경할 경우 정보�

hsprnote.blogspot.com

 

 

 

'JAVA > basic' 카테고리의 다른 글

오버라이딩 Override / Overriding & 다형성  (0) 2020.10.16
상속 / extends  (0) 2020.10.15
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
import  (0) 2020.10.15
배열과 메소드  (0) 2020.10.13
2차원 배열 / 다차원 배열  (0) 2020.10.13

 

 

(default는 아무것도 안적힌 기본 상태일때를 말함)

제어자 같은 클래스 같은 패키지 자손 클래스 전체
public [공용멤버] O O O O
protected O O O  
default [패키지멤버] O O    
private [전용멤버] O      

 

 

 

// 제어자 + [class/변수/메서드/생성자] 

Class 인스턴스 생성 제어 / 클래스를 다른클래스가 사용하게 하거나 못하게 하거나를 제어
변수 변경, 참조, 읽기 제어
메서드 호출 제어
생성자 인스턴스 생성 제어

 

// 제어자의 조합

대상 사용가능한 제어자
클래스 public, (default), final, abstract
메서드 모든 접근 제어자, final, abstract, static
멤버변수 모든 접근 제어자, final, static
지역변수 final

 

1. 메서드에 static과 abstract를 함께 사용할 수 없다.

-  static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다. 

 

2. 클래스에 abstract와 final을 동시에 사용할 수 없다.

- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다. 

 

3. abstract메서드의 접근제어자가 private일 수 없다.

 abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.

 

4. 메서드에 private과 final을 같이 사용할 필요는 없다.

- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.

 

 

~예제~

'JAVA > basic' 카테고리의 다른 글

상속 / extends  (0) 2020.10.15
[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15
import  (0) 2020.10.15
배열과 메소드  (0) 2020.10.13
2차원 배열 / 다차원 배열  (0) 2020.10.13
변수의 초기화 / 초기화 블럭  (0) 2020.10.08

sql에도 있고 util에 있는 Date처럼 내가 원하는 애들이 이름이 같으면 이상한걸 쓸수 있으니 주의해야 한다.

 

'JAVA > basic' 카테고리의 다른 글

[Singleton] 싱글톤 / 싱글턴 패턴  (0) 2020.10.15
getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
배열과 메소드  (0) 2020.10.13
2차원 배열 / 다차원 배열  (0) 2020.10.13
변수의 초기화 / 초기화 블럭  (0) 2020.10.08
객체지향 : class 생성  (0) 2020.10.07

Math.random()을 쓰다가 중복이 안나오게 하고 싶어서 만들어보았는데 왠지 그냥 쉬운 방법이 또 있을듯..

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
package OCt13;
 
public class memo {
 
    public static void main(String[] args) {
 
        int[] num = new int[10];
 
        for (int i = 0; i < num.length; i++) {
            num[i] = (int) (Math.random() * 10+ 1// 랜덤값 넣기
        }
 
        for (int c : num) {
            System.out.print(c + " ");
        }
        System.out.println();
 
        for (int i = 0; i < num.length; i++) {
            for (int j = i; j < num.length; j++) {
                while (true) {
                    if (i != j && num[i] == num[j]) {
                        int c = num[j];
                        num[j] = (int) (Math.random() * 10+ 1;
                        System.out.println(
                                (i + 1+ "번째숫자 " + num[i] + ", " + (j + 1+ "번째 숫자와 같아서 이 숫자를" + num[j] + "로/으로 변경");
                        System.out.println();
                        for (int a : num) {
                            System.out.print(a + " ");
                        }
                        System.out.println();
                        i = 0// i를 초기화해서 또 같은게 없는지 처음부터 끝까지 다찾음
                    } else {
                        break;
                    }
                }
            }
        }
 
        System.out.println();
        System.out.println("모두 다른 랜덤 숫자 !");
 
    }
}
 
cs

System.arraycopy (src, srcPos, dest, destPos, length)

[dest배열의 destpos번지에 src배열의 소스를 srcpos번지부터 length개 복사]

<삽입의 개념X 덮어씀O>

 

Object src : 복사하고자 하는 소스입니다. 원본

 

int srcPos  : 위의 원본 소스에서 어느 부분부터 읽어올지 위치를 정해줍니다.

                처음부터 데이터를 읽어올거면 0 을 넣어줍니다.

 

Object dest : 복사할 소스입니다. 복사하려는 대상입니다.

 

int destPos : 위의 복사본에서 자료를 받을 때, 어느 부분부터 쓸 것인지 시작 위치를 정해줍니다.

                 처음부터 데이터를 쓸 거면 0 을 넣어줍니다.

 

int length : 원본에서 복사본으로 데이터를 읽어서 쓸 데이터 길이입니다. 

               원본에서 복사본까지 얼마큼 읽어올 지 입력하는 것입니다.

 

 

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
    public static void main(String[] args) {
 
        int[] original = { 1234567891011 };
        int[] arr1 = new int[5];
        int[] arr2 = new int[6];
 
        System.arraycopy(original, 0, arr1, 0, arr1.length);
        System.arraycopy(original, arr1.length, arr2, 0, arr2.length);
 
        for (int i : arr1) {
            System.out.print(i + ", ");
        }
 
        System.out.println();
        System.out.println("====================");
 
        for (int i : arr2) {
            System.out.print(i + ", ");
        }
 
        
//        result
        
//        1, 2, 3, 4, 5, 
//        ====================
//        6, 7, 8, 9, 10, 11, 
        
        
    }
cs

 

 

 

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
    public static void main(String[] args) {
        char[] abc = { 'A''B''C''D'};
        char[] number = { '0''1''2''3''4''5''6''7''8''9'};
        System.out.println(new String(abc));
        System.out.println(new String(number));
    
        // 배열 abc와 number를 붙여서 하나의 배열(result)로 만든다.
        char[] result = new char[abc.length+number.length];
        System.arraycopy(abc, 0, result, 0, abc.length);
        System.arraycopy(number, 0, result, abc.length, number.length);
        System.out.println(new String(result));
        
        // 배열 abc을 배열 number의 첫 번째 위치부터 배열 abc의 크기만큼 복사
        System.arraycopy(abc, 0, number, 0, abc.length);
        System.out.println(new String(number));
        
        // number의 인덱스6 위치에 3개를 복사        
        System.arraycopy(abc, 0, number, 63);
        System.out.println(new String(number)); 
        
 
         // 출력
        /*
        ABCD
        0123456789
        ABCD0123456789
        ABCD456789
        ABCD45ABC9
        */
 
    } 
cs
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package OCt13;
 
public class ArrayBubbleSort {
 
    public static void main(String[] args) {
 
        // 정수 데이터 10개를 저장하는 배열 생성
        int[] number = new int[10];
 
        // 임의의 숫자 0~9까지의 숫자를 각 배열에 넣기
        for (int i = 0; i < number.length; i++) {
            number[i] = (int) (Math.random() * 10);
            System.out.print(number[i] + " ");
        }
 
        System.out.println();
        System.out.print("====================");
        System.out.println();
        
        for (int i = 0; i < number.length; i++) {
            boolean changed = false// 자리바뀜이 발생했는지 체크
 
            // 자리를 바꿈처리
            for (int j = 0; j < number.length - 1 - i; j++) {
                // 왼쪽 인덱스의 값과 오른쪽 인덱스의 값을 비교
                if (number[j] > number[j + 1]) {
                    int temp = number[j];
                    number[j] = number[j + 1];
                    number[j + 1= temp;
                    changed = true;
                }
 
            }
 
            for (int a : number) {
                System.out.print(a + " ");
            }
            System.out.println();
 
            if (!changed) {
                System.out.println("=======================");
                break;
            }
 
        }
 
        for (int a : number) {
            System.out.print(a + " ");
        }
 
    }
 
}
 
cs

'JAVA > basic' 카테고리의 다른 글

getter / setter  (0) 2020.10.15
접근제어 [ private / public / protected / default ]  (0) 2020.10.15
import  (0) 2020.10.15
2차원 배열 / 다차원 배열  (0) 2020.10.13
변수의 초기화 / 초기화 블럭  (0) 2020.10.08
객체지향 : class 생성  (0) 2020.10.07
생성자 / 초기화 메소드  (0) 2020.10.07
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
    int [][] score= new int[5][3];
        
        /*
         ㅁㅁㅁ
         ㅁㅁㅁ
         ㅁㅁㅁ
         ㅁㅁㅁ
         ㅁㅁㅁ
         */
    
    
    int [][] score2=new int[5][];
        score2[0]=new int[4];                
        score2[1]=new int[3];
        score2[2]=new int[2];
        score2[3]=new int[2];
        score2[4]=new int[3];
        
        /*
         ㅁㅁㅁㅁ
         ㅁㅁㅁ
         ㅁㅁ
         ㅁㅁ
         ㅁㅁㅁ 
         
         */
        
    int [][] score3 = {
            {010203},
            {111212},
            {212223},
    };
    
            /*
             01 02 03
             11 12 12
             21 22 23
             */
    
 
 
 //예
 
    int[][]arr3= {
            {1,2},
            {3,4,5},
            {6,7,8,9},
        };
    
    for(int i=0; i<arr3.length ; i++) {
        for(int j=0; j<arr3[i].length; j++) {
            System.out.print(arr3[i][j]+"\t");}
    
    System.out.println();}
 
                
cs

- for문을 이용한 역순 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
 
      public static void main(String []args) {
      //변환할 문자열
      String str = "Reverse this strings";
 
      //전체길이에서 0인덱스를 포함해 i--를 이용해 반대로 읽어나갑니다.
      for (int i = str.length() -1; i>=0; i--) {
         System.out.print(str.charAt(i));
      }
   }
}
 
 
cs

 

Stringbuffer를 이용한 역순 출력

reverse()

1
2
3
4
5
6
7
8
9
10
11
   public static void main(String []args) {
      // 버퍼를 만듭니다.
      StringBuffer strBuffer = new StringBuffer(); 
      //변환할 문자열
      String str = "Reverse this strings";
      // 버퍼에 문자열을 넣고
      strBuffer.append(str);
      // 버퍼안에 reverse()를 이용해 거꾸로 출력
      System.out.print(strBuffer.reverse());
   }
}
cs
		String str="abcd-efgh-ijkl";
		
		System.out.println(str.substring(2, 6)); //cd-e
		System.out.println(str.substring(5)); //efgh-ijkl
				

substring

ex) substring(0,5) :  0번째 부터 5개 string값 가져오기

    substring(5)  : 5번째부터 끝까지 가져오기

 

 

		String str="abcd-efgh-ijkl";
		
		System.out.println(str.lastIndexOf("-")); // 9
				

lastIndexOf

ex) lastIndexOf("a") : 마지막으로 *문자가 존재하는 위치의 인덱스 값( 중복일 경우 제일 마지막번호)

 

 

		String str="abcd-efgh-ijkl";
		
		System.out.println(str.replace("-","")); //abcdefghijkl
        

replace("a","b") : string 값 중 a를 모두 b로 변경해라

ex) replace("a","b") : 존재하는 모든 a를 b로 변경함

 

 

		String str="abcd-efgh-ijkl";
		
		System.out.println(str.indexOf("-")); // 4

indexOf("a") : string 값 중 문자의 위치 찾기  // 앞에꺼만나옴

ex)  str.indexOf("-") 

 

 

 

 

StringBuffer : StringBuffer인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스 생성

char charAt(int index) : 지정된 위치에 있는 문자를 알려줌

int compareTo(String str) : 문자열과 사전순서로 비교. 같으면 0, 사전순으로 이전이면 음수, 이후면 양수 반환

String concat(String str) : 문자열을 뒤에 덧붙임

boolean contains(CharSequence s) : 지정된 문자열이 포함되었는지 검사

boolean endsWith(String suffix) : 지정된 문자열로 끝나는지 검사

boolean equals(Object obj) : 매개변수로 받은 문자열과 String인스턴스의 문자열 비교. obj가 String이 아니거

나 문자열이 다르면 false 반환

boolean equalsIgnoreCase(String str) : 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교

int indexOf(int ch) : 주어진 문자가 문자열에 존재하는지 확인하여 위치 알려줌. 못 찾으면 -1을 반환

int indexOf(int ch, int pos) : 주어진 문자가 문자열에 존재하는지 지정된 위치부터 확인. 못찾으면 -1 반환

int indexOf(String str) : 주어진 문자열이 존재하는지 확인하여 위치 알려줌. 못찾으면 -1 반환

String intern() : 문자열을 상수풀에 등록. 이미 상수풀에 같은 내용의 문자열이 있을 경우 문자열의 주소값 반환

int LastIndexOf(int ch) : 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서 부터 찾아서 위치 알려줌.

int LastIndexOf(String str) : 지정된 문자열을 인스턴스의 문자열 끝에서부터 찾아서 위치 알려줌.

int length() : 문자열의 길이 알려줌

String replace(char old, char nw) : 문자열 중의 문자를 새로운 문자로 바꾼 문자열을 반환

String replace(CharSequence old, CharSequence nw) : 문자열 중의 문자열을 새로운 문자열로 모두 바꾼 문

자열 반환

String replaceAll(String regex, String replacement) : 문자열 중에서 지정된 문자열과 일치하는 것을 새로운

문자열로 모두 변경

String replaceFirst(String regex, String replacement) : 문자열 중에서 지정된 문자열과 일치하는 것 중 첫 번

째 것만 새로운 문자열로 변경

String[] split(String regex) : 문자열을 지정된 분리자로 나누어 문자열 배열에 담아 반환

String[] split(String regex, int limit) : 문자열을 지정된 분리자로 나누어 반환하는데 문자열 전체를 지정된 수로

자름

boolean startsWith(String prefix) : 주어진 문자열로 시작하는지 검사

String substring(int begin, int end) : 주어진 시작위치부터 끝 위치범위에 포함된 문자열을 얻는다. 이 때 시작

위치의 문자는 범위에 포함되지만, 끝 위치의 문자는 포함되지 않는다

String toLowerCase() : String인스턴스에 저장되어있는 모든 문자열을 소문자로 변환하여 반환

String toString() : String인스턴스에 저장되어 있는 문자열을 반환

String toUpperCase() : String인스턴스에 저장되어있는 모든 문자열을 대문자로 변환하여 반환

String trim() : 문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환. 중간에 있는 공백은 제거되지 않음

static String valueOf(boolean b) : 지정된 값을 문자열로 변환하여 반환. 참조변수의 경우 toString()을 호출한

결과를 반환함

[출처] String 클래스 생성자, 메서드|작성자 려리

 

Blog : 네이버 블로그

당신의 모든 기록을 담는 공간

blog.naver.com

startWith : 문자열이 지정한 문자로 시작하는지 판단. 같으면 true 아니면 false를 반환 (대소문자 구별) 

- 결과값 : true 

 

endWith : 문자열 마지막에 지정한 문자가 있는지를 판단후 있으면 true, 없으면 false를 반환 (대소문자 구별) 

- 결과값 : true 

 

equlas : 두 개의 String에 값만을 비교해서 같으면 true, 다르면 false를 반환 (대소문자 구별)

- 결과값 : true

 

indexOf : 지정한 문자가 문자열에 몇번째에 있는지를 반환한다. (int)

- 결과값 : 3

 

lastindexOf : 문자열에 지정한 문자가 마지막 몇 번째에 있는지를 반환한다. (int)

- 결과값 : 7

 

length : 문자열의 길이를 반환

- 결과값 : 6

 

replace : 문자열에 지정한 문자가 있으면 새로 지정한 문자로 바꿔서 출력

- 결과값 : A-B-C-D

 

replaceAll : 정규표현식을 지정한 문자로 바꿔서 출력한다.

- 결과값 : AB*CD

 

split : 지정한 문자로 문자열을 나눌 수 있다. (배열로 반환)

- 결과값 : B

 

substring : 문자열에 지정한 범위에 속하는 문자열을 반환한다. (시작범위에 값은 포함, 끝나는 범위에 값은 미포함)

- 결과값 : AB

 

toLowerCase, toUpperCase : 문자열에 대문자를 소문자로 또는 소문자를 대문자로 변환한다.

(예제 생략)

 

trim : 문자열에 첫 공백과 마지막 공백을 없애준다.

- 결과값 : java java java

 

valueOf : 지정한 개체의 원시 값을 반환

- 결과값 : 

valueOf : 12345

valueOf : 1

valueOf : 1

 

compareTo : 두 개의 String을 앞에서 부터 순서적으로 비교.

- 문자열의 길이가 다른 경우 : 

(str1.length - str2.length)를 반환

- 문자열이 다른 경우 : 

문자열이 다른 부분이 i라면, (str1.charAt(i) - str2.charAt(i))를 반환

- 결과값 : A < B

 

contains : 두 개의 String을 비교해서 비교대상 String을 포함하고 있으면 true, 다르면 false를 반환한다.

- 결과값 : true 

 

charAt : 지정한 index번째에 문자를 반환한다.

(예제 생략)

 

concat : 문자열과 문자열을 결합해준다.

(예제 생략)

 

format : 서식 문자열을 이용해서 서식화된 문자열을 반환한다. (뒤에 인수는 객체 배열이어야 한다.)

- 결과값 : 123,456 ... 7

 

matches : 지정한 정규 표현과 일치할 때 true를 반환한다.

 

- 결과값 : false

 

replaceFirst : 문자열에 지정한 문자가 있으면 첫번째만 새로 지정한 문자로 바꿔서 출력한다. 

- 결과값 : superman

 

nextInt 이후레 nextLine을 사용하면 노란체크한 것처럼 개행이 된다.

 

이를 방지하기 위해 nextInt 다음줄에

nextLine을 하나 넣어주면 된다.

 

+ Recent posts