[개발/Android] - 카카오 sdk v2 굳이 자바로 사용하기 -1 (카카오 로그인) 전 포스팅 로그인에 이어서 카카오 메시지 보내는 방법을 자바 코드로 작성하였습니다. 1. kotlin으로 카카오 링크 메시지 보내기 class KakaoLink { companion object { @JvmStatic val instance by lazy { KakaoUtil() } } fun kakaoLink(context : Context) { val defaultFeed = FeedTemplate( content = Content( title = "타이틀", description = "메시지 내용", imageUrl = "이미지 경로", link = Link( webUrl = "웹 링크", mobileWebU..
[개발/Android] - 카카오 sdk v2 굳이 자바로 사용하기 -2 (카카오 링크 메시지) 카카오 sdk v2는 코틀린으로 가이드가 나와있습니다. 하지만 굳이, 아니면 어쩔 수 없이 자바로 해야되는 분들을 위해 자바로 사용하는 방법을 공유합니다. sdk init, 앱 등록, 키발급 같은 내용은 생략합니다. 1. kotlin으로 카카오 로그인하기 - Login 코드 class KakaoLogin { interface IKLoginResult { fun onKakaoLoginResult(user: User?) } var user:User? = null var listener:IKLoginResult? = null // 로그인 callback 구성 val callback: (OAuthToken?, Thr..
소켓 : 두 프로그램이 네트워크를 통해 서로 통신할 수 있도록 양쪽에 생성되는 링크의 단자 소켓이 연결되면 서로 다른 프로세스끼리 데이터를 전달할 수 있음 서버 클라이언트 socket() socket() bind() listen() connect() accept() 서버, 클라이언트는 각각 socket을 생성하고 서버는 bind에서 포트번호를 할당한다 그 후에 listen()을 호출하여 클라이언트의 접속을 기다린다. 클라이언트는 connect()를 통해 서버에 접속을 시도한다. 클라이언트 요청이 오면 accept() 함수를 호출에 연결한다. 소켓이 연결되면 recv() / send() 함수를 통해 데이터를 전달하고 마지막에 close()를 호출하여 소켓을 종료한다. C프로그래밍에서는 socket() ->..
싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스 싱글턴을 만드는 3가지 방법 1. public static final 방식 public class Singleton { public static final Singleton INSTANCE = new Singleton(); private Singleton() {} public void singletonMethod() {} } private 생성자는 public static final 필드의 Singleton.INSTANCE를 초기화 할 때 한 번만 호출 public이나 protected 생성작 없으므로 클래스가 초기화 될 때 만들어진 인스턴스가 전체 시스템에서 하나뿐임이 보장 예외적으로 권한이 있는 클라이언트는 AccessibleObject.set..
클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 생성자보다 정적 팩터리 메서드가 좋은점 1. 이름을 가질 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 4. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 단점 1. 상속을 하려면 public이나 protected생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다. 2. 정척 팩터리 메서드는 프로그래머가 찾기 어렵다. 정적팩터리 메서드 명명방식 1. from : 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 ..
스트림 최종연산 collect collect() : 스트림의 최종연산, 매개변수로 컬렉터를 필요 Collector : 인터페이스, 컬렉터는 이 인터페이스를 구현 Collectors : 클래스, static메서드로 미리 작성된 컬렉터를 제공 스트림을 컬렉션과 배열로 변환 : toList(), toSet(), toMap(), toCollection(), to Array() 통계 : Counting(), summingInt(), averagingInt(), maxBy(), minBy() 리듀싱 : reducing() 문자열 결합 : joining(), joining(","), joining("," , "{" , "}"); 그룹화와 분할 : groupingBy(), partitioningBy() Collecto..
스트림? - 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓은 것 - 데이터 소스가 무엇이던 간에 같은 방식으로 다를 수 있게 해줌 - 코드의 재사용성이 높아짐 문자열 정렬, 출력 String[] strings = {"data1", "data3", "data2"}; List stringList = Arrays.asList(strings); Arrays.sort(strings); Collections.sort(stringList); for(String string : strings) { System.out.println(string); } for(String string : stringList) { System.out.println(string); } Stream strin..

람다식? - 메서드를 하나의 식으로 표현한 것 - 메서드의 이름과 반환값이 없어지므로, 익명함수라고도 함 람다식 작성법 반환타입 메서드이름 (매개변수) { //내용 } (매개변수) -> { //내용 } int add(int a, int b) { return a + b; } (int a, int b) -> { return a + b; } (a, b) -> a + b 함수형 인터페이스 Type t = (int a, int b) -> a + b; interface Function { int add(int a, int b); } Function function = new Function() { @Override public int add(int a, int b) { return a + b; } }; functi..

해시문제 베스트 앨범 코드 class Solution { public int[] solution(String[] genres, int[] plays) { int[] answer = {}; HashMap map = new HashMap(); for (int i = 0; i < genres.length; i++) { PlayData playData; playData = new PlayData(i); playData.put(i, plays[i]); map.merge(genres[i], playData, PlayData::merge); } Iterator iterator = PlayData.sortByTotalValue(map).iterator(); ArrayList list = new ArrayList(); ..