웹개발 수업/JAVA

웹개발_JAVA 15

gugigugi92 2023. 2. 8. 15:50

API(Application Programming Interface)
개발에 필요한 라이브러리들의 집합.
선배 개발자들이 만들어 놓은 소스코드
모듈 = 실행 가능한 패키지

-내부 API
JDK 설치 시 제공해주는 기본 API
docs.oracle.com/javase

-외부 API
선배 개발자들이 개발한 패키치 및 클래스들을 의미한다.
보통 JAR파일로 배포하며 자바 프로젝트의 build path에 추가하여 사용할 수 있다.

JAR 파일로 배포하기
   배포할 클래스 또는 패키지 우클릭
   > Export > JAVA/JAR file 선택 > Next
   > destination을 원하는 경로로 선택
   > Export Java source files... 체크
   > Finish

JAR 파일을 프로젝트에 추가하기
   배포된 JAR파일을 다운 받기
   > 프로젝트 우클릭 > Build Path > Configure Build Path
   > Libraries 탭 클릭 > ClassPath(안되면 ModulePath) 클릭 > Add External JARs
   > 저장된 경로의 .jar파일을 더블 클릭으로 추가 > Apply 클릭
   > Orders and Exports 탭 클릭
   > Select All 클릭 > Apply and Close

package apiTest;
//.jar 파일 활용해보기
 
public class API_Test {
public static void main(String[] args) {
	Calc calc = new Calc();
	try {
		System.out.println(calc.divide(10, 3));
	} catch (ArithmeticException e) {
		e.printStackTrace();
	}
}
}
package apiTest;
//외부에서 받은 .jar파일
/**
 * @author 한동석
 * @since JDK11
 * <br>
 * 계산기
 */
public class Calc {
	
	/**
	 * 
	 * @param number1: 나눠지는 수
	 * @param number2: 나누는 수
	 * @return 몫
	 * 
	 * 두 정수의 나눗셈 후 몫을 리턴한다.
	 * 
	 * @throws ArithmeticException
	 * @see {@link Math}
	 */
	public int divide(int number1, int number2) {
		return number1 / number2;
	}
}

출력결과


package apiTest;
//쿨에스엠에스를 이용한 문자 전송 테스트
import java.util.HashMap;

import org.json.simple.JSONObject;

import net.nurigo.java_sdk.api.Message;
import net.nurigo.java_sdk.exceptions.CoolsmsException;

public class MessageTest {
public static void main(String[] args) {
    String api_key = "";
    String api_secret = "";
    Message coolsms = new Message(api_key, api_secret);

    // 4 params(to, from, type, text) are mandatory. must be filled
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("to", "전화번호");
    params.put("from", "전화번호");
    params.put("type", "SMS");
    params.put("text", "문자 발송 테스트");
    params.put("app_version", "test app 1.2"); // application name and version

    try {
      JSONObject obj = (JSONObject) coolsms.send(params);
      System.out.println(obj.toString());
    } catch (CoolsmsException e) {
      System.out.println(e.getMessage());
      System.out.println(e.getCode());
    }
}
}

 

빌드시 문자메세지 발송



Object 클래스 // 오브젝트는 최상위 부모 클래스다 클래스의 아담


1. toString() // 무조건 재정의, 개발자를 위함
항상 객체명을 출력할 때에는 toString()을 붙여서 출력해준다.
따라서 객체명만 출력메소드에 전달하더라도 toString()의 문자열 값이 출력된다.
기본적으로 Object에서는 소속과 필드 주소를 문자열로 리턴해주지만,
실사용에서는 불필요한 정보이기 때문에, 재정의한 뒤 필드의 정보를 확인하도록 구현한다.
실무에서는 클래스 선언 시 각 필드의 초기화 여부를 확인하기 위해 toString()을 재정의하여 사용한다.


2. equals()
주소값을 비교하는 메소드이며 == 과 동일하다.
String 클래스에서 equals()를 값 비교로 재정의하여 사용하기 때문에
문자열 비교는 무조건 equals()로 비교한다.
즉, 일반적인 데이터 타입은 ==, 
String 같은 class 값은 equlas() 비교
만약 주소 비교가 아닌 원하는 필드의 비교가 필요하다면 반드시 equals()를 재정의하여 사용한다.

 

package objectTest;
//오브젝트 클래스
//toString(),equals()
public class Student{
	private int number;
	private String name;
public Student() {;}// 기본 생성자
//초기화 생성자 단축키 :Art+Shifr+s->o
public Student(int number, String name) {//초기화 생성자
										 //hirerarchy 클래스에 Ctr+t
										 //object 클래스가 부모로 존재
	super();
	this.number = number;
	this.name = name;
}
//getter setter 단축키 : Art1+Shift+s->r 
public int getNumber() {
	return number;
}
public void setNumber(int number) {
	this.number = number;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

@Override//toString 재정의
public String toString() {
	return "Student [number=" + number + ", name=" + name + "]";
}
	//Art+shift+s ->s 
	//해당 문구 추가시 문자열 값이아닌 1,송태섭 출력
    //toString은 무조건 부모에 있는걸 재정의하기하기 위함
	//어떤 필드에 어떤값이 들어있는지 완벽하게 나옴
	//개발자를 위함

@Override
public boolean equals(Object obj) {//equals 재정의
	if(this==obj) {// 주소가 같으면 값도같다
 		return true;
	}
	if(obj instanceof Student) { // 타입비교
		Student anotherStudent = (Student) obj; //object엔 Student에 있는 number가 없어서
												//down캐스팅
		if(this.number == anotherStudent.number) {
			return true;
	}
}
	return false;
}
}
package objectTest;

public class StringTest {
public static void main(String[] args) {
	String data1="ABC";//값에대해 필드에 저장되어있는 "값"에 포커스	
	String data2="ABC";//할당되어잇던 값의 기존에 있던 주소값을 그대로 가져온다!
					   //필드의 주소는 다르지만 값의주소는 같다
					   //선언될때 intern()메소드가 생략된다
	 
	String data3=new String("ABC"); // 필드에 포커스
	String data4=new String("ABC"); // intern이 자동으로 붙지않음
	
	System.out.println(data1==data2);//true 필드에있는 문자열 값의 주소를 비교
	System.out.println(data3==data4);//false 
	System.out.println(data3.intern()==data4.intern());//true
													   //intern은 직접 상수 pool에서 주소값을 가져와준다.
													   //intern은 C언어 출신 	
	System.out.println(data1.equals(data2));//true 필드의 주소값을 비교
	System.out.println(data3.equals(data4));//ture
	System.out.println(data2.equals(data4));//true
}
}
package objectTest;

public class ToStringTest {
public static void main(String[] args) {
	Student student = new Student(1,"송태섭");
	System.out.println(student);//objectTest.Student@4926097b : 해쉬코드를 16진수로 변환한 문자열 값
	System.out.println(student.toString()); // 같은 결과, 객체명을 호출할때 toString이 생략됨 
										    
											
}		
}
package objectTest;

public class EqualsTest {
public static void main(String[] args) {
Student student = new Student(1,"송태섭");
boolean isSame = student.equals(new Student(2,"송태섭"));//student 클래스에 object 생성후 false
//boolean isSame = student.equals(new Student(1,"송태섭"));//student 클래스에 object 생성후 ture

System.out.println(isSame); //object equlas는 주소비교여서 주소값이 다르기에 false(재정의 필요)
							
}	
}