본문 바로가기

Java

(13)
제네릭 특징 오랜만에 왔다...  생각은 하는데 쓰는게 쉽지가 않네 머쓱.. 오늘은 제네릭에 대해 알아보자.public class Test {} public class MyMap {} 이런거 본 적 있을거다.ArrayList list = new ArrayList(); 맞다. 리스트할 때 봤던 이녀석도 제네릭이다!  제네릭은 쉽게 말해서 부호 사이에 타입 파라미터가 위치한다. 제네릭이 뭐냐면 클래스, 인터페이스, 메서드에서 사용할 타입을 파라미터로 지정할 수 있게 해주는 기능이다. 제네릭을 사용하면 컴파일 타임에 타입을 체크할 수 있어 코드의 안전성과 가독성을 높일 수 있다.  1. 캐스팅 제거// 제네릭 사용 전List list = new ArrayList();list.add("Hello");String str =..
(spring) Exception 이녀석........ 예외... 그냥 throws Exception에 try-catch(Excetption e) 박았는데............. try-catch를 매 클래스마다 박는건 비효율적이래요. ? 생각해보면 당연한데.. 난 생각을 안했지....... 예외부터 제대로 알아봐야겠는데... 왜 봐도봐도 모르겠냐 예외를 지정하는 방법은 여러가지가 있는데 처리되는 순서대로 알아봅시다. 1. @ExceptionHandler  특정 컨트롤러에서 예외를 처리하기 위해 사용됩니다. @Controllerpublic class MyController { @GetMapping("/example") public String example() { throw new RuntimeException("Exception 발생..
Logger 딱 대 + 피곤해서 막 썼는데 나중에 수정하겠습니다. 그냥 대충 이해정도로만 봐주세요. 하하.. System.out.println()만 썼던 사람? 저요... 요점? 개발자들은 Logger 쓴단다... Logger? Logging? 문제 발생 시 원인 분석을 위한 정보 확인용으로 많이 쓰죠? org.slf4j slf4j-api ${org.slf4j-version} ch.qos.logback logback-classic 1.2.3 저는 일단 의존성이 2개 추가돼있는데 하나하나 알아봅시다. 아지삭들이 뭔지부터 알아야겠어. 1. SLF4JSimple Logging Facade for Java 로깅 프레임워크에 대한 일관된 추상화 계층을 제공하는 라이브러리런타임 시에 다양한 로깅 프레임워크 선택하여 사용역시 오늘도 바..
Set / Map / Iterator 이번엔 컬렉션 프레임워크 중에서 Set , Map, HashMap에 대해 알아보겠습니다. 1. Set순서를 보장하지 않는다. -> 인덱스로 객체를 가져오는 get()메서드가 없다.중복 저장이 불가하다.Set을 상속받아 구현한 HashSet, TreeSet 등이 있다.Set set = new HashSet();set.add("A");set.add("B");set.add("A");for(String item : set){ System.out.print(item); // AB}set.contains("A"); // trueset.size(); // 2set.isEmpty(); // falseset.remove("A"); // [B]set.clear(); // [] * TreeSet은 내부적으로 이진 검색 ..
익명 클래스 / 람다식 / 메소드 참조 람다식을 알기 전에 익명 클래스부터 짚고 넘어가자. (처음 부분은 정리가 뒤죽 박죽이니 1번부터 보셔도 됩니다.) 익명 클래스는 이름이 없는 클래스로 보통 한 번만 사용되는 클래스를 정의할 때 사용됩니다. 이름이 없다는 건 클래스 정의에 이름이 붙지 않았다는 의미입니다. 익명클래스는 주로 인터페이스나 추상 클래스를 구현할 때 사용 된다고 하는데 예시를 보죠.class MyRunnable implements Runnable { @Override public void run() { for (int i = 0; i  이게 기존에 우리가 클래스를 선언해서 사용하던 방식입니다. 이걸 익명 클래스로 작성해 볼게요.public class Main { public static void ma..
형 변환 / valueOf() / stream Java 형 변환. 뭐야 왜 안돼. 할 때가 많지 않나요? 이참에 그냥 이해 빡 하고 다 짚고 넘어가 봅시다.  뭐 명시적 형변환, 묵시적 형변환, 자동 형변환, 강제 형변환, 업 캐스팅, 다운 캐스팅은.... 많으니까..ㅎㅅㅎ 설명하는 건 자주 쓰이는 쉬운 문법일 뿐이고, 다양한 방법은 더 많습니다. 1. int -> Stringint num = 123;String str = String.valueOf(num); // String.valueOf()String str = Integer.toString(num); // Integer.toString() * 참고로 toString은 null이 입력되면 예외가 발생하지만 valueOf()는 "null"이 반환됩니다. 2. String -> intString s..
String / StringBuilder / StringBuffer Java에서 문자열을 사용할 때 String만 주야장천 썼었는데 StringBuilder와 StringBuffer에 대해서도 정리해야겠다. String은 불변 객체라 했었다. 물론 바꾸는 척 하는 방법은 얼마든지 있었다. + 연산과 concat() 메서드가 주로 쓰이지. 근데 문자열 연산에 주로 쓰이는게 StringBuilder와 StringBuffer이다.  왜? String에서 + 연산으로 문자열을 합치면 기존게 변하는 게 아니라 새로운 인스턴스가 생겨서 메모리 낭비가 된다. StringBuilder / StringBuffer 둘 다 가변 객체이다. String과 달리 동일한 객체 내에서 수정이 일어나 연산 속도가 매우 빠르다. appen()를 이용해서 문자열을 합친다.StringBuilder sb ..
static과 final 이 녀석들...  static과 final 헷갈리지 말자. static 어디서 많이 보지 않았나요. 그 녀석 맞아요.public class Main{ public static void main(String[] args){ }} 네 main에 붙어있습니다.  static 멤버는 클래스에 속하며, 클래스의 모든 인스턴스가 해당 멤버를 공유한다.클래스가 메모리에 로드될 때 static 멤버가 초기화된다.static 멤버는 클래스 이름을 통해 직접 접근이 가능하다. 이게 무슨 소리게요? 클래스에서 공유되는 멤버라는 뜻이에요. 예를 들어 Car 클래스가 있고 new myCar해서 내 차 색상은 검정이야. new yourCar해서 니 차 색상은 흰색이야. 근데 색상은 static 멤버야 그러면 각각 가..