1. 왜 자바를 써요?
- 객체지향성 때문에요
2. 자바프로그램의 분류
- SE(core) / EE(Enterprise) / ME(망함)
3. JDK, JRE(JVM : Java Virtual Machine)
- jdk(jdk + jre(jvm))
* jvm이 얼마나 빨라 질 것인가 -> chip
-----------------------------------------------------------------------------------------------------------------------
프로그램 개론(Ch.02~04)
데이터 처리(자료 구조)
+ 객체
-> 객체 선언 / 사용(Ch.6)
-> 객체 지향 프로그램 기법(Ch.7)
은닉(캡슐화 : incapsulation) - 데이터 보호
1. 접근 제어자(private, default, protected, public)
2. setter / getter
상속(inheritance)
1. extends
추상 : 추출, 공통화
1. abstract 클래스
2. interface
* 추상 메서드(X)
다형(polymorphism)
1. 클래스 형변환
2. 오버로딩 / 오버라이딩
* 내부클래스(inner class) : 멤버변수
Ch.04 : 흐름 제어(알고리즘)
* 예외 처리(Exception Handling)
- 고급 에러처리 기법
-> try catch finally를 if~else~대신에 사용한다.
전세계 프로그램 사용률 index 사이트
http://www.tiobe.com/tiobe-index
TIOBE Index | TIOBE - The Software Quality Company
More news Latest news May 2018 1 billion milestone for TIOBE TIOBE checks more than 1,000,000,000 lines of industrial software code every day now for its customers. April 2018 TiCS 9.1 released! TIOBE releases TiCS 9.1.0 with over 140 improvements, a.o., Company Viewer and Test Code Analysis. April
www.tiobe.com
-----------------------------------------------------------------------------------------------------------------------
클래스 관리
패키지(package) - 패키지는 클래스의 묶음이고
임폴트(import) - 임폴트를 이용하여 패키지를 사용한다
=> 문법 - 알고리즘 - 개발 순으로 공부하고 난 후 비로서 이클립스를 사용하면 개발효율이 높아진다.
데모 파일 사용
java.lang(Ch.9)
* import를 하지 않아도 사용 가능하다
* 주로 자료형에 대한 내용이 있다
Object(가장 어려움)
String
Wrapper
기본자료형 -> 클래스화
* 오토박싱 / 언박싱
java.util(Ch.10)
* Date / Calendar
시험 객관식 범위는 Ch.8까지
오버로딩의 3개 조건
메소드 생성 조건
등등
java.util.Random 클래스
random은 난수를 생성한다.
RandomEx01 - 난수 생성, 로또 번호 생성
import java.util.Random;
public class RandomEx01 {
public static void main(String[] args) {
// 임의의 값을 생성
// Math.random() - 구형
// Random 클래스로 승격함
Random r1 = new Random();
Random r2 = new Random(System.currentTimeMillis());
//int i1 = r2.nextInt();
int i1 = r2.nextInt(10); // 0 <= x < 10까지
System.out.println(i1);
// 1 <= x <= 45
System.out.println(r2.nextInt(45) + 1);
}
}
LottoEx01 - 로또 발생기
import java.util.Random;
public class LottoEx01 {
public static void main(String[] args) {
Random r1 = new Random(System.currentTimeMillis());
for(int i=0; i<5; i++) {
for(int j=0; j<6; j++) {
System.out.printf("%2d ", r1.nextInt(45)+1);
}
System.out.println("");
}
}
}
중복 수 제거를 위한 알고리즘이 필요함 - 추후 처리방법 공부후 추가하자
java.util.StringTokenizer클래스
StirngTokenizer는 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(token)이라는 여러 개의 문자열로 잘라내는 데 사용된다. 예를 들어 "100,200,300,400"이라는 문자열이 있을 때 ','를 구분자로 잘라내면 "100", "200", "300", "400"이라는 4개의 문자열(토큰)을 얻을 수 있다 = split이랑 비슷
import java.util.StringTokenizer;
public class StringTokenizerEx01 {
public static void main(String[] args) {
// String - split
// StirngTokenize
String data1 = "사과 배 복숭아";
StringTokenizer st1 = new StringTokenizer(data1);
System.out.println(st1.countTokens());
// hasMoreElement
// nextElement
while(st1.hasMoreTokens()) {
System.out.println(st1.nextToken());
}
}
}
split은 배열로 반환되는데 토큰은 하나하나 개별로 뽑아낸다
import java.util.StringTokenizer;
public class StringTokenizerEx01 {
public static void main(String[] args) {
// String - split
// StirngTokenize
String data1 = "사과&배&복숭아";
StringTokenizer st1 = new StringTokenizer(data1, "&");
System.out.println(st1.countTokens());
// hasMoreElement
// nextElement
while(st1.hasMoreTokens()) {
System.out.println(st1.nextToken());
}
}
}
사과&배&복숭아 처럼 공백이 아닌 &일 경우 생성자에 data1, &를 추가해준다
StringTokenizerEx02 - 예제 9-39
import java.util.StringTokenizer;
public class StringTokenizerEx02 {
public static void main(String[] args) {
String expression = "x=100*(200+300)/2";
StringTokenizer st =
new StringTokenizer(expression, "+-*/=()");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
"+-*/=()"도 구분자가 될 수 있다
import java.util.StringTokenizer;
public class StringTokenizerEx02 {
public static void main(String[] args) {
String expression = "x=100*(200+300)/2";
StringTokenizer st =
new StringTokenizer(expression, "+-*/=()", true);
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
true를 넣어주면 구분자까지 구분해서 반환한다
StringTokenizerEx03
import java.util.StringTokenizer;
public class StringTokenizerEx03 {
public static void main(String[] args) {
String data = "사과&배&&&복숭아";
StringTokenizer st = new StringTokenizer(data, "&");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
import java.util.StringTokenizer;
public class StringTokenizerEx03 {
public static void main(String[] args) {
String data = "사과&배&&&복숭아";
StringTokenizer st = new StringTokenizer(data, "&");
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
String[] datas = data.split("&");
System.out.println(datas.length);
for (String data1 : datas) {
System.out.println(data1);
}
}
}
split과 tokenizer의 차이는 위와 같다. tokenizer는 알아서 공백을 없애버림
StringJoiner
public class StringJoinerEx01 {
public static void main(String[] args) {
String[] arr = {"사과", "배", "키위"};
String str = String.join(",", arr);
System.out.println(str);
}
}
import java.util.StringJoiner;
public class StringJoinerEx01 {
public static void main(String[] args) {
String[] arr = {"사과", "배", "키위"};
String str = String.join(",", arr);
System.out.println(str);
StringJoiner sj = new StringJoiner(",");
sj.add("사과");
sj.add("배");
sj.add("키위");
System.out.println(sj.toString());
}
}
import java.util.StringJoiner;
public class StringJoinerEx01 {
public static void main(String[] args) {
String[] arr = {"사과", "배", "키위"};
String str = String.join(",", arr);
System.out.println(str);
StringJoiner sj = new StringJoiner(",");
sj.add("사과").add("배").add("키위");
//sj.add("배");
//sj.add("키위");
System.out.println(sj.toString());
}
}
체이닝을 시켜도 된다
java.util.Scanner 클래스
import java.util.Scanner;
public class ScannerEx01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("입력 : ");
// scanner.next(); 입력 대기(엔터키까지)
String msg = scanner.next();
System.out.println("입력 메시지 : " + msg);
scanner.close();
}
}
import java.util.Scanner;
public class ScannerEx01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("입력 : ");
// scanner.next(); 입력 대기(엔터키까지)
String msg = scanner.nextLine();
System.out.println("입력 메시지 : " + msg);
scanner.close();
}
}
scanner.nextLine(); 으로 하면 한줄 전체 엔터키 누르기 전까지 다 출력 된다
ScannerEx02
import java.util.Scanner;
public class ScannerEx02 {
public static void main(String[] args) {
Scanner scid = new Scanner(System.in);
System.out.println("아이디를 입력하세요 : ");
String msg_id = scid.nextLine();
System.out.println("비밀번호를 입력하세요 : ");
String msg_pass = scid.nextLine();
System.out.println("입력 메시지 : " + msg_id);
System.out.println("입력 메시지 : " + msg_pass);
scid.close();
}
}
ScannerEx03 - q를 입력받으면 종료하는 프로그램
import java.util.Scanner;
public class ScannerEx03 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String input = "";
while(true) {
System.out.println("입력 : ");
input = s.nextLine();
if(!input.equals("q")) {
System.out.println("입력 메시지 : " + input);
} else {
System.out.println("종료");
break;
}
};
s.close();
}
}
ScannerEx04 - 구구단
단수입력 : 1단
1 * 1 = 1
1 * 2 = 2
...
1 * 9 = 9
단수입력 : 2단
2 * 1 = 2
2 * 2 = 4
...
2 * 9 = 18
단수입력 : 끝
끝
import java.util.Scanner;
public class gugudan {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String msg = "";
while(true) {
System.out.print("단수입력 :");
msg = scan.nextLine();
if(!msg.equals("끝")) {
int i = Integer.parseInt(msg);
for(int j=0; j<=9; j++) {
System.out.println(i + "*" + j + "=" + i*j);
}
} else {
System.out.println("종료");
break;
}
};
}
}
컬렉션 프레임웍(Collections Framework)
컬렉션 프레임웍이란, '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다. 컬렉션은 다수의 데이터, 즉 데이터 그룹을, 프레임웍은 표준화된 프로그래밍 방식을 의미한다.
컬렉션 프레임웍은 컬렉션, 다수의 데이터를 다루는데 필욯나 다양하고 풍부한 클래스들을 제공하기 때문에 프로그래머의 짐을 상당히 덜어 주고 있으며, 또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다
List : 순서가 있는 데이터의 집합
Set : 순서를 유지하지 않는 데이터의 집합.(중복 허용 X)
Map : 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합(순서는 유지X, 키는 중복 X, 값은 중복 O)
ArrayList
ArrayList는 컬렉션 프레임웍에서 가장 많이 사용되는 컬렉션 클래스일 것이다. List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는 특징을 갖는다.
ArrayList는 Object 배열을 이용해서 데이터를 순차적으로 저장한다.
ArrayListEx01
import java.util.ArrayList;
public class ArrayListEx01 {
public static void main(String[] args) {
String [] arr = new String[3];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
// 추가가 불가능, 추가하려면 배열을 다시 구성해야함
// 방크기를 50개로 잡아놓고 시작한다 그러나 늘어나면 자동으로 늘어남(=스트링버퍼)
ArrayList al = new ArrayList(50);
al.add("1");
al.add("2");
al.add("3");
al.add("4"); // 내가 원하는 만큼 데이터 입력 가능
System.out.println(al.size());
al.add("5");
System.out.println(al.size());
// 방 위치 값 출력
System.out.println(al.get(0));
System.out.println(al.get(1));
// 마지막 데이터 출력
System.out.println(al.size()-1);
// 전체 데이터 출력
for(int i=0; i<al.size(); i++) {
System.out.println(al.get(i));
}
}
}
import java.util.ArrayList;
public class ArrayListEx01 {
public static void main(String[] args) {
String [] arr = new String[3];
arr[0] = "1";
arr[1] = "2";
arr[2] = "3";
// 추가가 불가능, 추가하려면 배열을 다시 구성해야함
// 방크기를 50개로 잡아놓고 시작한다 그러나 늘어나면 자동으로 늘어남(=스트링버퍼)
ArrayList al = new ArrayList(50);
al.add("(Object)1111");
al.add("(Object)2222");
al.add("(Object)3333");
al.add("(Object)4444"); // 내가 원하는 만큼 데이터 입력 가능
System.out.println(al.size());
al.add("(Object)5555");
System.out.println(al.size());
// 방 위치 값 출력
System.out.println(al.get(0));
System.out.println(al.get(1));
// 마지막 데이터 출력
System.out.println(al.size()-1);
// 전체 데이터 출력
for(int i=0; i<al.size(); i++) {
System.out.println(al.get(i));
}
// 향상된 for문 사용
for(Object obj : al) {
String data = (String)obj;
System.out.println(data);
}
}
}
al.add 안 값은 사실 Object형태이므로 이 값을 꺼내오려면 String이 아닌 Object 타입으로 불러와 주어야 한다.
ArrayListEx02 - Object 타입으로 받는 이유
import java.util.ArrayList;
public class ArrayListEx02 {
public static void main(String[] args) {
ArrayList al1 = new ArrayList();
String data = new String("홍길동");
// Object형으로 받으면 더 쉽게 받을 수 있다
al1.add(data);
ArrayList al2 = new ArrayList();
Integer data1 = new Integer(10);
al2.add(data1);
ArrayList al3 = new ArrayList();
Person p = new Person();
al3.add(p);
}
}
public class Person {
String name;
}
Object로 이용하는 이유는 받아올 자료가 어떤 타입인지 모르고 매번 오버라이딩하면 너무 많은 절차가 진행되기 때문에 Object를 사용하여 효율적인 작업이 되게 하였다.
import java.util.ArrayList;
public class ArrayListEx02 {
public static void main(String[] args) {
ArrayList al3 = new ArrayList();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1.name = "성춘향";
p2.name = "홍길동";
p3.name = "박문수";
al3.add(p1);
al3.add(p2);
al3.add(p3);
for(int i=0; i<al3.size(); i++) {
Person p = (Person)al3.get(i);
System.out.println(p.name);
}
for(Object o : al3) {
Person p = (Person)o;
System.out.println(p.name);
}
}
}
ArrayListEx03 - 제네릭스(Generics)
import java.util.ArrayList;
public class ArrayEx03 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1.name = "성춘향";
p2.name = "홍길동";
p3.name = "박문수";
// <> : Generics
// 데이터에 대한 규정
ArrayList<Person> al1 = new ArrayList<>();
ArrayList al2 = new ArrayList();
al1.add(p1);
//al1.add("sdfsdf");
al2.add(p1);
al2.add("sdfsdf");
for(Person p : al1) {
System.out.println(p.name);
}
for(Object o : al2) {
Person p = (Person)o;
System.out.println(p.name);
}
}
}
ArrayListEx04
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
for(String str : al) {
System.out.println(str);
}
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
for(String str : al) {
System.out.println(str);
}
al.add(2, "방자");
for(String str : al) {
System.out.println(str);
}
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
for(String str : al) {
System.out.println(str);
}
al.add(2, "방자");
for(String str : al) {
System.out.println(str);
}
al.set(0, "월매");
for(String str : al) {
System.out.println(str);
}
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
/*
for(String str : al) {
System.out.println(str);
}
al.add(2, "방자");
for(String str : al) {
System.out.println(str);
}
*/
al.set(0, "월매");
for(String str : al) {
System.out.println(str);
}
al.remove(0);
for(String str : al) {
System.out.println(str);
}
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
/*
for(String str : al) {
System.out.println(str);
}
al.add(2, "방자");
for(String str : al) {
System.out.println(str);
}
*/
al.set(0, "월매");
for(String str : al) {
System.out.println(str);
}
//al.remove(0);
al.remove("월매");
for(String str : al) {
System.out.println(str);
}
}
}
import java.util.ArrayList;
public class ArrayListEx04 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<>();
al.add("1번");
al.add("2번");
al.add("3번");
/*
for(String str : al) {
System.out.println(str);
}
*/
al.add(2, "방자");
for(String str : al) {
System.out.println(str);
}
/*
al.set(0, "월매");
for(String str : al) {
System.out.println(str);
}
//al.remove(0);
al.remove("월매");
for(String str : al) {
System.out.println(str);
}
*/
// indexOf : 검색기능
int position = al.indexOf("방자");
System.out.println(position);
}
}
LottoEx01 - 중복 제거 버전
import java.util.ArrayList;
import java.util.Random;
public class LottoEx01 {
public static void main(String[] args) {
Random r = new Random(System.currentTimeMillis());
for(int i=1; i<=5; i++) {
ArrayList<Integer> lottoNumbers = new ArrayList<>();
while(true) {
int lottoNumber = r.nextInt(45) + 1;
if(lottoNumbers.indexOf(lottoNumber) == -1) {
lottoNumbers.add(lottoNumber);
if(lottoNumbers.size() == 6) {
for(int number : lottoNumbers) {
System.out.printf("%2d ", number);
}
break;
}
}
};
System.out.println("");
}
}
}
'Web & Mobile > JAVA' 카테고리의 다른 글
Lecture 30 - Java(11) File, InputStream, OutputStream, 보조스트림, FileReader, ZipCode 검색 (0) | 2023.06.20 |
---|---|
Lecture 29 - Java(10) ArrayList, LinkedList, HashSet, TreeSet, HashMap, File (0) | 2023.06.20 |
Lecture 27 - Java(8) 추상화, 형변환, 다형성, 예외처리 (0) | 2023.06.20 |
Lecture 26 - Java(7) 주민번호체크, wrapper 클래스, Date, Calendar (0) | 2023.06.20 |
Lecture 25 - Java(6) 클래스, 접근제어자, 이클립스 환경 구축법 (0) | 2023.06.20 |
댓글