64일차_JAVA

서창민·2023년 6월 12일
0

JAVA

목록 보기
16/21
post-thumbnail

23.06.12 월 64일차

JAVA

  • 인터페이스
package ch08;

public interface RemoteControl {
	// public 추상메소드 
    public  void turnOn();
}
-------------------------------------------------------------

package ch08;

public class Audio implements RemoteControl {

	@Override
	public void turnOn() {
		System.out.println("Audio 를 켭니다.");
		
	}

}
---------------------------------------------------------------------------------

package ch08;

public class RemoteControlExample {

	public static void main(String[] args) {
		
		RemoteControl rc = null;
		rc = new Television();
		rc.turnOn();
		
		rc = new Audio ();
		rc.turnOn();
	}
}

인터페이스를 불러와 오버라이딩 후 메인에서 인터페이스가 형으로된 객체를 잡아 출력을 할 수 있도록 한다.

  • 인터페이스 필드
    ex)
	public static final int MAX_VOLUME=10;
	int MIN_VOLUME = 0;

인터페이스에서 선언된 필드는 모두 public static final의 특성을 가지게 된다
객체의 이름은 되도록 대문자로 표기한다.

  • 추상 메소드
// 추상 메소드 : public, abstract가 생략이 가능하다.
public abstract void turnOn();
    
추상 메소드 : public, abstract가 생략이 가능하다.

추상 메소드에서 public, abstract가 생략이 가능하며 정상적으로 컴파일 된다.

  • 정적 메소드
	// 정적 메소드
	public static void changeBattery() {
		System.out.println("리모콘 건전지를 교체합니다.");
	}
    
    -- 호출
    // 정적 메소드
	RemoteControl.changeBattery();

메인화면에서 인터페이스.정적메소드(); 동작시 출력 확인이 가능하다.

  • 디폴트 메소드
	// 디폴트 메소드 정의하기
	default void setMute(boolean mute) {
		if (mute) {
			System.out.println("(디폴트) 무음 처리 합니다.");
			setVolume(MIN_VOLUME);
		}else {
			System.out.println("(디폴트) 무음 해제 합니다.");
		}
	}
    
    -- 호출
    

디폴트 메소드는 추상메소드와 달리 실행부{}가 있다.
클래스 메소드와 동일하지만 default를 붙여주어야 사용 할 수 있다.

  • 자바에서의 예외처리
에러(Error)
퓨터 하드웨어의 고장으로 인해 응용프로그램 실행 오류가 발생하는것

일반예외(Exception)
컴파일러가 예외 처리 코드 여부를 검사하는 예외

실행예외(Runtime Exception)
컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외

잘못된 사용 또는 코딩으로 인한 오류가 발생했을때 예외처리를 한다.

예외처리 구조
package ch11;
public class TestException{
	public static void main(String[] args){
    	try{
        	System.out.println("명령문 실행1");
            
            // NullPointerException 예외발생
            String str = null;
            str.equals("test");
            
            // 예외발생
            double d = 10 / 0; 
            
            System.out.println("명령문 실행2");
        }catch(NullPointerException e){
        	System.out.println("NullPointerException 예외발생");    
        }catch(Exception e){
        	System.out.println("예외발생");
        }finally
        	System.out.println("항상실행");
        }
	}
}

먼저 예외가 발생되면 catch에 있는 Execption 예외처리로 이동되어 실행 후 finally 가 실행되어 코드가 종료된다.
NullpointerException은 Exception보다 상위에서 기입이 되어야 한다.

  • 예외 떠넘기기
package javaproject;

public class ThrowsExample1 {

	public static void main(String[] args) {
		try {
			findClass();
		}catch(ClassNotFoundException e) {
			System.out.println("예외처리");
		}finally {
			System.out.println("항상실행");	
		}
	}

	public static void findClass() throws ClassNotFoundException{
		System.out.println("findClass 메소드(실행)");
		Class.forName("java.lang.String2");
	}
}

파일 이름이 없는경우의 예외처리를하는 코드이다.
throws를 사용하여 떠넘길 클래스를 지정하고 예외처리를 떠넘긴 클래스에서 사용실행되도록 한다.

  • 레코드 추가
package membert;
import java.sql.*;
public class InsertMemberT {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521/xe";
		String userid = "system";
		String userpwd = "1234";
		String sql = "";
		PreparedStatement pstmt = null;
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.OracleDriver");			
			conn = DriverManager.getConnection(url, userid, userpwd);
			for (int i = 4; i<6; i++) {
				sql = "insert into memberT (m_idx, m_sname, m_title, m_cnt) values(idx_membert.nextval, ?, ?, ?)";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, "춘배" + i);
				pstmt.setString(2, "춘배 멋짐 증가+"+i);
				pstmt.setInt(3, 1+i);
				pstmt.executeUpdate();
				System.out.println(i+"번째 레코드가 추가되었습니다.");
				pstmt.close();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {

			System.out.println("레코드 추가 완료되었습니다.");
			}
		}
	}

오라클 DB memberT 테이블에 for문을 이용해 레코드를 추가하는 코드이다.

  • 난수로 레코드 입력하기
package membert;
import java.sql.*;
public class InsertMemberT {
	public static void main(String[] args) {
		String url = "jdbc:oracle:thin:@localhost:1521/xe";
		String userid = "system";
		String userpwd = "1234";
		String sql = "";
		PreparedStatement pstmt = null;
		Connection conn = null;
		try {
			Class.forName("oracle.jdbc.OracleDriver");			
			conn = DriverManager.getConnection(url, userid, userpwd);
			// 1. 이름을 배열로 받아서 사용하시오.
			// 2. 난수를 이용해서 받아주세요.
			for (int i = 0; i<100; i++) {
				String nameK[] = {"팬더", "라이언", "못난이인형", "코끼리", "애비츄", "리라쿠마", "빵떡이"}; 
				int j = (int) (Math.random()*7);
				
				sql = "insert into memberT (m_idx, m_sname, m_title, m_cnt) values(idx_membert.nextval, ?, ?, ?)";
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, nameK[j] + j);
				pstmt.setString(2, nameK[j]+ j +"의 난수레코드");
				pstmt.setInt(3, 1+i);
				pstmt.executeUpdate();
				System.out.println(i+"번째 난수 레코드가 추가되었습니다.");
				pstmt.close();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {

			System.out.println("난수 레코드 추가 완료되었습니다.");
			}
		}
	}

레코드에 추가될 이름칼럼을 배열값으로 받아서 난수를 활용해 레코드를 추가하는 내용이다.

어렵지만 구조적으로 이해가 되니 만드는것은 크게 어렵지 않다.
다만 메소드와 필드, 상속과 예외처리에 대한 개념을 보다 집중적으로 이해해야 활용할 수 있을 것 같다.

profile
Back-end Developer Preparation Students

0개의 댓글