직접 만들어서 사용하는 class
자바로 배열에 저장된 수준에서 최대값, 최소값을 구하는 클래스 만들기 연습
package fc.java.model2;
public class MinMaxFinder {
private MinMaxFinder(){ }
public static int findMin(int[] arr) {
int min=arr[0]; //초기값
for(int i=1; i<arr.length; i++){
if(arr[i]<min){
min = arr[i];
}
}
return min;
}
public static int findMax(int[] arr) {
int max = arr[0]; //초기값
for (int i = 1; i < arr.length; i++) {
if (arr[i] < max) {
max = arr[i];
}
}
return max;
}
}
package fc.java.course2.part1;
import fc.java.model2.MinMaxFinder;
public class MinMaxFinderTest {
public static void main(String[] args) {
int[] arr={4,3,1,2,5};
int min = MinMaxFinder.findMin(arr);
int max = MinMaxFinder.findMax(arr);
System.out.println("min = " + min);
System.out.println("max = " + max);
}
}
난수: 예측 불가능한 무작위 수
6개 난수를 생성하여 중복되지 않게 저장하기
for루프를 사용해 배열에 중복되지 않는 값만 저장.
while루프로 난수 생성, 이전 인덱스와 비교하여 중복인지 확인 후 중복 아니면 배열에 추가
package fc.java.course2.part1;
import java.util.Random;
public class RandomAPI {
public static void main(String[] args) {
Random rand = new Random();
int[] arr = new int[6];
int i =0;
while (i<6){
int num = rand.nextInt(45)+1;
boolean isDuplicate=false;
for (int j=0;j<i;j++){
if(arr[j]==num){
isDuplicate=true;
break;
}
}
if(!isDuplicate){
arr[i++]=num;
}
}
for (int num: arr){
System.out.println(num+"");
}
}
}
JAVA API를 다운받아 사용하는 법 → https://mvnrepository.com
JSON: 프로그래밍 언어나 플랫폼에 상관없이 데이터를 교환할 수 있도록 설계된 데이터 형식
fromJson() : JSON 형식의 문자열을 자바 객체로 변환해주는 Gson API의 메서드
toJson() : 객체를 JSON형식으로 변환해주는 Gson API 메서드
Gson: 자바 객체를 JSON형식으로 변환하거나 JSON데이터를 자바 객체로 변환하는 라이브러리(API)
Gson검색

2.8.9버전 선택후 jar파일 다운

C:\Users\j\Documents\객체2 에 저장함
jar: 이미 만들어진 여러개의 class를 하나로 압축하여 배포하기 위해 만들어진 파일
Project Structure 클릭

Libraies에서 +누르고 java선택

jar파일 다운로드 했던 경로 찾기

아래에 gson파일이 있는 것을 확인 가능

위 과정 후 아래 코드 추가
import com.google.gson.Gson;
package fc.java.model2;
public class Person {
private String name;
private int age;
public Person(){ }
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package fc.java.course2.part1;
import com.google.gson.Gson;
import fc.java.model2.Person;
public class GsonToAPI {
public static void main(String[] args) {
Person person = new Person("John", 30);
Gson gson = new Gson();
String json = gson.toJson(person);
System.out.println(json);
}
}
package fc.java.course2.part1;
import fc.java.model2.Person;
import com.google.gson.Gson;
public class GsonFromAPI {
public static void main(String[] args) {
String json = "(\"name\":\"John\",\"age\":30}";
Gson gson=new Gson();
Person p = gson.fromJson(json,Person.class);
System.out.println(p.getName());
System.out.println(p.getAge());
System.out.println(p.toString());
}
}
IntArray(): 생성 동작
add(): 저장 동작
get(): 가져오는 동작
size(): ****크기 구하는 동작
package fc.java.course2.part1;
public class IntArrayBasic {
public static void main(String[] args) {
//정수 5개 배열에 저장, 출력
int[] nums = new int[5];
nums[0]=1;
nums[1]=2;
nums[2]=3;
nums[3]=4;
nums[4]=5;
//nums.length: 길이를 구하는 동작
for(int i = 0; i<nums.length;i++){
int data=nums[i];
System.out.println(data);
}
//향상된 for문(foreach)
for(int data:nums){
System.out.println(data);
}
}
}
package fc.java.model2;
import java.util.Arrays;
public class IntArray {
private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
private int[] elements;
public int size=0;
//생성동작
public IntArray(){
elements=new int[DEFAULT_CAPACITY];
}
//저장하는 동작
public void add(int element){
if(size==elements.length){
//크기 2배 늘리는 작업
ensureCapacity();
}
elements[size++]=element;
}
//얻는 동작
public int get(int index){
return elements[index];
}
public int size(){
return size;
}
public void ensureCapacity(){
int newCapacity=elements.length*2;
elements=Arrays.copyOf(elements, newCapacity);
}
}
package fc.java.course2.part1;
import fc.java.model2.IntArray;
public class MyIntArrayTest {
public static void main(String[] args) {
//정수 3개를 배열에 저장하고 출력하세요.
IntArray list = new IntArray();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.size());
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
BookArray(): 생성 동작
add(): ****저장 동작
get(): ****가져오는 동작
size(): 크기 구하는 동작
package fc.java.model2;
public class Book {
//멤버변수, 상태정보, 속성
private String title;
private int price;
private String company;
private String author;
public Book(){ //디폴트 생성자
}
//생성자 메서드의 중복정의(오버로딩)
public Book(String title, int price, String company, String author) {
this.title = title;
this.price = price;
this.company = company;
this.author = author;
}
//getter, setter
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
//object->toString()재정의
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", price=" + price +
", company='" + company + '\'' +
", author='" + author + '\'' +
'}';
}
}
package fc.java.model2;
import java.util.Arrays;
public class BookArray {
private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
private Book[] elements;
public int size=0;
//생성동작
public BookArray(){
elements=new Book[DEFAULT_CAPACITY];
}
//저장하는 동작
public void add(Book element){
if(size==elements.length){
//크기 2배 늘리는 작업
ensureCapacity();
}
elements[size++]=element;
}
//얻는 동작
public Book get(int index){
if(index<0||index>=size){
throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨");
}
return elements[index];
}
public int size(){
return size;
}
public void ensureCapacity(){
int newCapacity=elements.length*2;
elements=Arrays.copyOf(elements, newCapacity);
}
}
package fc.java.course2.part1;
import fc.java.model2.Book;
import fc.java.model2.BookArray;
public class MyBookArrayTest {
public static void main(String[] args) {
BookArray list = new BookArray();
list.add(new Book("자바", 15000, "한빛", "홍길동"));
list.add(new Book("C++", 17000, "대림", "이길동"));
list.add(new Book("Python", 16000, "정보", "나길동"));
// vo = list.get(0);
System.out.println(list.get(0)); //-1하면 index의 범위 (0~9)가 초과된다는거 뜸
//vo = list.get(1);
System.out.println(list.get(1));
//vo = list.get(2);
System.out.println(list.get(2));
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
ObjectArray(): 생성 동작
add(): 저장하는 동작
get(): 가져오는 동작
size(): 크기를 구하는 동작
package fc.java.model2;
import java.util.Arrays;
public class ObjectArray {
private final int DEFAULT_CAPACITY=5; //수정불가(final)=>상수
private Object[] elements; //object는 최상위 클래스. 다형성배열
public int size=0;
//생성동작
public ObjectArray(){
elements=new Object[DEFAULT_CAPACITY];
}
//저장하는 동작
public void add(Object element){ //다형성인수
if(size==elements.length){
//크기 2배 늘리는 작업
ensureCapacity();
}
elements[size++]=element;
}
//얻는 동작
public Object get(int index){
if(index<0||index>=size){
throw new IndexOutOfBoundsException("index의 범위(0~9)가 초과됨");
}
return elements[index];
}
public int size(){
return size;
}
public void ensureCapacity(){
int newCapacity=elements.length*2;
elements=Arrays.copyOf(elements, newCapacity);
}
}
package fc.java.course2.part1;
import fc.java.model2.*;
import fc.java.model2.ObjectArray;
public class MyobjectArrayTest {
public static void main(String[] args) {
// A, B, C 객체를 배열에 저장하고 출력
// book, movie, member 객체를 배열(Object[])에 저장하고 출력
ObjectArray list = new ObjectArray();
list.add(new A()); // Upcasting: Object element = new A();
list.add(new B()); // Upcasting: Object element = new B();
list.add(new C()); // Upcasting: Object element = new C();
A a = (A) list.get(0); // A <= Object
a.display();
B b = (B) list.get(1); // B <= Object
b.display();
C c = (C) list.get(2); // C <= Object
c.display();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof A) {
((A) list.get(i)).display();
} else if (list.get(i) instanceof B) {
((B) list.get(i)).display();
} else if (list.get(i) instanceof C) {
((C) list.get(i)).display();
}
}
}
}
package fc.java.model2;
public class A {
public void display() {
System.out.println("나는 A다.");
}
}
package fc.java.model2;
public class B {
public void display() {
System.out.println("나는 B다.");
}
}
package fc.java.model2;
public class C {
public void display() {
System.out.println("나는 C다.");
}
}
https://docs.oracle.com/en/java/javase/17/docs/api/index.html
17버전에 자바의 스펙, api가 어떻게 만들어져 있는지에 관한 설명서
여기서 java.base 클릭

자주 쓰는 패키지, api가 있음 → java.util 클릭

ArrayList클릭

List가 ArrayList의 부모클래스

생성자, 메서드들 확인 가능

<자바에서 제공해주는 배열처럼 동작하는 ArrayList API>
ArrayList: 자바에서 제공해주는 클래스 중 모든 객체를 배열에 저장하여 관리하는 클래스
→ java.util: ArrayList가 저장 된 패키지 이름
add, get: ArrayList에 객체를 저장하는 메서드 이름과 객체를 가져오는 메서드 이름
size(): ArrayList에 저장된 객체의 개수를 구하는 메서드
ArrayList< E >: ArrayList에 특정 객체만 저장할 때 선언하는 방식
ArrayList(): 생성 동작
add(): 저장하는 동작
get(): 가져오는 동작
size(): 크기를 구하는 동작
package fc.java.course2.part1;
import fc.java.model2.Book;
import java.util.*;
public class ArrayListTest {
public static void main(String[] args) {
// Book 3권을 배열에 저장하고 출력.
// Book[], Object[]
List<Book> list = new ArrayList<Book>(); //ArrayList<Book> list = new ArrayList<>(1); //기본크기(10): Book[]
list.add(new Book("자바", 15000, "한빛", "홍길동"));
list.add(new Book("C++", 17000, "대림", "이길동"));
list.add(new Book("Python", 16000, "정보", "나길동"));
Book vo = list.get(0);
System.out.println(vo.toString());
vo = list.get(1);
System.out.println(vo.toString());
vo = list.get(2);
System.out.println(vo.toString());
for (int i = 0; i < list.size(); i++) {
// Book b = list.get(i);
System.out.println(list.get(i)); //Object->Book(JVM에서 자동으로 Book의 toString())
}
}
}
subString: 주어진 문자열에서 일부분 문자열 추출해주는 메서드
IndexOf: 특정 문자열의 위치를 찾아서 그 위치의 인덱스를 리턴해주는 메서드
split: 문자열에서 특정 구분자를 기준으로 분리해주는 메서드
package fc.java.course2.part1;
public class HelloWorldString {
public static void main(String[] args) {
String str = new String("HelloWorld");
System.out.println(str.toString());
String str1="Hello World";
System.out.println(str1.toString());
}
}
package fc.java.course2.part1;
public class StringManipulation {
public static void main(String[] args) {
int a=10;
String str="HelloWorld";
System.out.println(str.charAt(1)); //'e'
System.out.println(str.replaceAll("o","X")); //HellXWXrld
System.out.println(str.length()); //10
System.out.println(str.toUpperCase()); //HELLOWORLD
System.out.println(str.toLowerCase()); //helloworld
System.out.println(str.substring(5)); //World
System.out.println(str.substring(5,8)); //Wor
System.out.println(str.indexOf("Wr")); //5,-1
for(int i=0; i<str.length();i++){
System.out.println(str.charAt(i));
}
}
}
equals()메서드: 문자열이 같으면 true반환, 다르면 false반환
compareTo()메서드: 문자열 사전순으로 비교, 두 문자열 같으면 0반환, 비교 대상 문자열이 기준 문자열보다 작으면 음수, 크면 양수 반환
package fc.java.course2.part1;
public class StringCompare {
public static void main(String[] args) {
String str1="Hello";
String str2="World";
if(str1.equals(str2)){
System.out.println("str1==str2");
}
else{
System.out.println("str1!=str2");
}
String str3="apple";
String str4="banana";
int result=str3.compareTo(str4); //0,음수,양수
if(result==0){
System.out.println("str3==str4");
}
else if(result<0){
System.out.println("str3<str4");
}
else {
System.out.println("str3>str4");
}
}
}
package fc.java.course2.part1;
import java.util.Scanner;
public class StringSplit {
public static void main(String[] args) {
//String str = "Hello World,Java";
// String str = "Hello World Java";
//String[] strArray = str.split(",");
// String[] strArray = str.split("\\s+");
Scanner scanner = new Scanner(System.in);
System.out.println("문자열을 입력하세요.");
String str=scanner.nextLine();
String[] strArray = str.split("\\s+");
for(String s:strArray){
System.out.println(s.toString());
}
}
}
인터페이스 기반 프로그래밍
A클래스는 C클래스를 통해서 B클래스를 동작 시킬 수 있다.
→ B클래스의 동작방식을 몰라도 사용 가능
CC - 인터페이스 역할(옵저버) - 부모
BB - 내부 동작방식 모름
→ CC는 노출시키고 BB 내부코드는 숨기는 C클래스를 만듦
package fc.java.model2;
public interface CC {
public void x();
public void y();
public void z();
}
package fc.java.model2;
//BB는 노출을 시키지 않는다.(BB.class)(BB.java : X)
public class BB implements CC {
@Override
public void x() {
System.out.println("x동작이 실행된다.");
}
@Override
public void y() {
System.out.println("y동작이 실행된다.");
}
@Override
public void z() {
System.out.println("z동작이 실행된다.");
}
}
package fc.java.course2.part1;
import fc.java.model2.*;
public class InterfaceAPI {
public static void main(String[] args) {
CC c=new BB();
c.x();
c.y();
c.z();
}
}
자바에서 데이터베이스 연결하기
여러 데이터베이스들을 사용하기 위해서 API가 있어야 함.
→ 인터페이스를 통해 API들이 연결됐다고 가정하면 사용자들은 API를 직접 쓰는게 아니라 인터페이스를 통해서 API 사용
DB Vender = 데이터베이스 회사
Driver(드라이버)
드라이버를 통해 DB연결. 드라이버들을 마음대로 만드는게 아니라 인터페이스를 구현해서 만들어야함. 사용자들은 드라이버를 몰라도 인터페이스를 가지고 드라이버 클래스를 연결, 사용 가능
DB에 연결하기 위해 필요한 정보
[URL: DB접속 URL(벤더들이 제공)]
jdbc:oracle:thin:@localhost:1521:DBNAME
jdbc:mysql://localhost:3306/DBNAME
jdbc:sqlserver://localhost:1433;DatebaseName=DBNAME
package fc.java.model2;
//interface는 자바에서 제공 함
public interface Connection {
//데이터베이스 연결 동작
public void getConnection(String url, String username, String password);
}
package fc.java.model2;
public class OracleDriver implements Connection{
@Override
public void getConnection(String url, String username, String password) {
System.out.println("url, username, password 정보를 이용하여 oracle DB를 접속 시도한다.");
}
}
package fc.java.model2;
public class MySQLDriver implements Connection{
@Override
public void getConnection(String url, String username, String password) {
System.out.println("url, username, password 정보를 이용하여 mysql DB를 접속 시도한다.");
}
}
package fc.java.model2;
public class MSSQLDriver implements Connection{
@Override
public void getConnection(String url, String username, String password) {
System.out.println("url, username, password 정보를 이용하여 mssql DB를 접속 시도한다.");
}
}
JDBC Programming(Java DataBase Connectivity): 자바 데이터베이스 프로그래밍, 자바에서 데이터베이스와의 연결을 위한 API
java.sql: 자바에서 데이터베이스 프로그래밍을 하기 위해 제공된 API들이 들어있는 패키지 이름
package fc.java.course2.part1;
import fc.java.model2.Connection;
import fc.java.model2.OracleDriver;
public class DataBaseConnction {
public static void main(String[] args) {
//oracle DB접속
Connection conn = new OracleDriver();
conn.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system", "manage");
//mysql DB접속
conn = new OracleDriver();
conn.getConnection("jdbc:mysql://localhost:3306/test","root", "1234");
//mssql DB접속
conn = new OracleDriver();
conn.getConnection("jdbc:sqlserver://localhost:1433;DatebaseName=mem","sa", "12345");
}
}