Java - 13

하승·2022년 7월 11일
0

웹 개발반 - Java

목록 보기
13/19
post-thumbnail

API(Application Programming Interface)

응용 프로그램 프로그래밍 인터페이스
자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 의미한다.
선배 개발자들이 java에서 코딩을 쉽게 할 수 있도록 미리 만들어 놓은 것들

API의 종류는 굉장히 많고 다양하기 때문에 모두 외우는 것은 절대 불가능하다.
그렇기 때문에 처음 보는 API라도 설명을 잘 읽고 맞는 목적으로 사용하는
방법을 알아야 한다.

Coolsms API

Coolsms API는 쉽고 빠르게 쿨에스엠에스의 문자서비스를 이용할 수 있으며,
알림톡발송, 발신번호관리 또한 사용할 수 있는 최신 트렌드의 기술입니다.
사용방법
https://developer.coolsms.co.kr/SDK_Java_Getting_Started_ko
해당 사이트로 들어간 뒤 회원가입 후 api_key와 api_secret를 생성해준다.

그 후 해당 버튼을 클릭 후 javaSDK-2.2.jar 다운로드 받고 JsonSimpleLibrary 다운로드
두개 모두 다운로드 받았다면 이클립스를 켜서 다운 받은 jar파일들을 import해준다.
1. 프로젝트에서 마우스 오른쪽 버튼 클릭 - Build Path - Figure Build Path 클릭
2. Libraries 클릭 > Add External JARs 클릭, 저장한 파일 import
아래 코드는 Collsms 사이트에있는 example 코드이다.

package sms;
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 CoolSMSTest {
	public static void main(String[] args) {
		String api_key = "Api 키"; // Api 키
	    String api_secret = "Api secret"; // 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", "010"); 	// 수신 번호 (받는사람 번호)
	    params.put("from", "010");	// 발신번호  (보내는 사람 번호)
	    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 클래스

모든 클래스들의 최상위 클래스

toString()	: 객체 출력시 나올 문자열 정의 / 객체가 가지고 있는 정보들을 설명하는 문자열	
*==		: 두 주소값이 같은지 확인하는 연산자						
equals()	: 두 주소값이 같은지 확인하는 메소드
hashCode()	: 해쉬값(주소값 관련된 어떤 int값 리턴)

따라서 우리가 만드는 클래스에서는 주소값이 아닌 다른 값으로
활용될 수 있도록 재정의 할 수 있어야 한다.

toString();

toString() 메소드는 해당 인스턴스에 대한 정보를 문자열로 반환합니다.
이때 반환되는 문자열은 클래스 이름과 함께 구분자로 '@'가 사용되며,
그 뒤로 16진수 해시 코드가 추가됩니다.
16진수 해시 코드 값은 인스턴스의 주소를 가리키는 값으로, 인스턴스마다 모두 다르게 반환됩니다.

package object;

public class ObjectTest {
	public static void main(String[] args) {
		Car mycar = new Car("Ferri");
		System.out.println(mycar);
		
		String str = mycar.toString();
		System.out.println(str);
		
		Car momcar = new Car("K8");
		System.out.println(momcar);
	}
}

class Car{
	String brand;

	public Car(String brand) {
		super();
		this.brand = brand;
	}

위에 코드에서는 toString을 따로 재정의해주지 않았기 때문에 이와 같이 주소값이 출력이 될것이다.

허나 toString 재정의를 해준다면

	@Override
	public String toString() {
		return "브랜드  : "+brand; 
	}


이처럼 우리가 원하는 값을 return 해주는것을 확인할 수 있다.

==

두 주소값이 같은지 확인하는 연산자 이다.

package object;

public class ObjectTest2 {
	public static void main(String[] args) {
		String msg1 = RedVelvet;
		String msg2 = "RedVelvet";
		System.out.println(msg1 == msg2);
        //true
		
		String msg3 = new String("RedVelvet");
		String msg4 = new String("RedVelvet");
		System.out.println(msg3 == msg4);
        //false
      }
    }

위에 두 변수의 결과는 true지만 아래 두 객체의 결과는 false이다.
왜 이럴까 답은 간단하다. 위에서의 변수 선언시 변수의 주소값이 할당되지만 새로 객체를 생성하지 않고 이어서 변수를 선언한다면 동일한 값이 있는지 확인하고 있으면 같은 주소를 할당하고 다른면 다른 주소를 할당하게 된다. 따라서 msg1과 msg2는 같은 값이 담겨 있기 때문에 같은 주소가 할당되었을 것이다 그러므로 true가 나오는 것 이고, msg3과 msg4는 객체를 새로 생성한 것 이기 때문에 서로 다른 주소값을 할당 받았으므로 false가 나온다.

equals()

Object 클래스의 equals()는 객체가 가지고 있는 주소 값을 비교한다. 그래서 동위 객체는 무조건 false가 나온다.( 다른 주소 이기 때문에 ) * 동위 객체 : 갖고 있는 값만 같은 객체주소 값이 아니라 인스턴스 내부의 값을 비교하고 싶으면( 동위 객체를 동일 객체로 보고 싶으면 ) equals() 메소드를 재정의 해야한다.

아래코드는 equals() 재정의를 하지않고 동위객체를 equals()메소드로 비교해보았다.

		User user1 = new User(1, 1234);
		User user2 = new User(1, 1234);
		System.out.println(user1.equals(user2));
        //결과는 당연히 false가 나왔다.
        
    class User{
	int userid;
	int userpw;
	
	public User(int userid, int userpw) {
		this.userid = userid;
		this.userpw = userpw;
	}
 }

그렇다면 이제 equlas() 메소드를 재정의 한뒤 다시 비교해보자.

@Override
	public boolean equals(Object obj) {
		//1. 타입비교(해당하는 클래스 타입의 객체가 매개변수로 넘어왔는지)
		if(obj instanceof User) {
			//2. 다운캐스팅
			User target = (User)obj;
			
			//3. 조건 판별 (그때그떄 상황에따라 비교할것을 바꿔주면 됨.)
			//if(this.ueserid.equals(target.userid))
			if(this.userid == target.userid) {
				if(this.userpw == target.userpw) {
					return true;
				}
			}
		}
		return false;
	}

재정의 한뒤 위에코드를 다시 비교해보면

		User user1 = new User(1, 1234);
		User user2 = new User(1, 1234);
		System.out.println(user1.equals(user2));
        //true가 나온다!!

hashCode()

해쉬값(주소값 관련된 어떤 int값 리턴)
해쉬코드도 주소값을 정수로 리턴하기 때문에 서로 다른 객체는 서로 다른 값을 반환한다.

		System.out.println(user1.hashCode());
		System.out.println(user2.hashCode());

hashCode도 우리가 지금까지 했던 것 처럼 재정의를 해줄 필요가 있다.

@Override
public int hashCode(){
	return userid;
    //User 객체가 가지고있는 userid 값을 리턴한다.
}

그 후 다시 출력해본다면 두 객체 모두 1이라는 값을 리턴한다.

		System.out.println(user1.hashCode());
		System.out.println(user2.hashCode());

우리는 이 Object클래스들의 메소드들을 재정의하면서 우리가 원하는 값, 우리가 원하는 리턴값을 우리에게 맞게 가공하는 과정이 중요하다.

profile
화이팅!

0개의 댓글