본문 바로가기

Back-End/JAVA

(16)
람다식과 함수형 인터페이스 람다식과 함수형 인터페이스람다식 : 익명 함수 라고도 불린다. 자바에서는 인터페이스의 익명 클래스를 간략히 표현하는데 사용된다.함수형 인터 페이스람다식 형태로 익명 클래스가 만들어질 수 있는 인터페이스조건 : 추상 메서드가 하나만 있어야 한다.람다식과 1:1 대응이 될 수 있어야 하므로@FunctionalInterface 로 강제반환값도 없고 파라미터도 없을 때@FunctionalInterfacepublic interface Printer { void print(); // void say (); // 둘 이상의 메서드는 불가하다}Printer printer1 = new Printer() { @Override public void print() { System.out..
문자열(String)의 메서드 문자열(String)은 불변(Immutable)- 문자열 스스로를 변경하는 메서드는 없다. => 새 문자열 또는 다른 값을 반환boolean 타입 반환 메서드- str.isEmpty() - 문자열의 길이가 0인지 여부- str.isBlank() - 공백을 제외한 문자열의 길이가 0인지 여부- str1.contains(str2) - str1(기준) 문자열 안에 str2 문자열에 해당하는 것이 있으면 true, 없으면 false 반환문자타입 반환 메서드str.charAt(str의 인덱스) - N번째 문자 반환str.charAt(str.length() - 1) - 문자열의 마지막 문자 얻기문자열의 위치 반환 메서드(int형으로 반환)- str.indexOf('문자') -  문자열에서 인자의 '문자'와 일치하는..
Math, Random 클래스 Math 클래스Math는 수 많은 수학 문제를 해결해주는 클래스이다. 1. 기본 연산 메서드abs(x) : 절대값max(a,b) : 최대값min(a,b) : 최소값2. 지수 및 로그 연산 메서드exp(x) : e^x 계산log(x) : 자연 로그 log10(x) : 로그 10pow(a, b) : a의 b 제곱3. 반올림 및 정밀도 메서드ceil(x) : 올림floor(x) : 내림rint(x) : 가장 가까운 정수로 반올림round(x) : 반올림4. 기타 메서드sqrt(x) : 제곱근cbrt(x) : 세제곱근random() : 0과 1.0 사이의 무작위 값 생성참고) 아주 정밀한 숫자와 반올림 계산이 필요하다면 BigDecimal 을 사용하자!
래퍼 클래스 Java는 객체 지향 언어인데 기본형은 객체 타입이 아니다..객체가 아니기 때문에 한계가 있다.우리는 객체 안에 유용한 메서드(기능)을 만들 수 있다! 하지만 기본형은 그런 유용한 기능들이 없어서 사용함에 있어 많은 제약들이 따르고 심지어 기본형은 Null 값을 가질 수 없다!그래서 이 기본형을 객체 타입으로 바꾸는 것이 바루 래퍼 클래스이다!! 래퍼 클래스는 기본형을 객체로 감싸서 더 편리하게 만들 수 있는 클래스이다.래퍼 클래스가 기본으로 제공 되는 것들은 다들 알고있지요?(사실 쓰기 너무 귀찮음)int -> Integershort -> Shortlong -> Longchar -> Charactor등등 int와 char을 제외하고는 전부 기본형 이름을 대문자로 시작해주면된다! 래퍼 클래스의 특징1. ..
불변 String 클래스와 가변 StringBuilder 자바에서 문자를 다루는 대표적인 타입은 char, String 2가지가 있따.하지만 char은 문자 하나를 다룰 때 사용하는데 만약 문자가 여러개(문자열)면 char[] 배열을 사용해야한다. 그러면 너무 불편해서 이에 대안으로 String이 나왔다."문자열 생성 방법"String str1 = "Hello";String str2 = new String("hello");String은 클래스이다. 기본형아니다.. 참조형이다!원래는 우리가 참조형 인스턴스를 만들면 보통 new 키워드를 사용한다.하지만 String은 매우 많이 사용해서 Java에서 특별히 " "(쌍따움표)를 지원한다. String 주요 메서드(이 부분은 String 주요 메서드 글로 또 업로드 예정)length() : 문자열 길이를 반환charA..
람다와 스트림 람다식의 도입으로 인해, 자바는 객체지향언어인 동시에 함수형 언어가 되었다..!람다 표현식 - 람다는 익명 함수를 말한다. 즉, 이름이 없는 간단한 함수를 작성하는 방식- 반환 타입과 메서드 이름을 제거하고 매개변수 옆에 -> 를 추가한다.//기존 코드반환타입 메서드이름 (매개변수 선언) { 문장들}//람다식 도입(매개변수 선언) -> {문장들} 예제1//기존 코드int max(int a, int b){ return a > b ? a : b;}//람다식 도입(int a, int b) -> { return a > b ? a : b}//return문 대신 식으로 대신 할 수 있다. 식의 연산 결과가 자동적으로 변환값이 된다.(int a, int b) -> a > b ? a : b//람다식에 선언된 매개변수의..
불변 객체 기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다. (자바는 항상 값을 복사해서 대입하기 때문이다!)참조형 : 하나의 객체를 참조값을 통해 여러 변수에 공유할 수 있다. 그럼 참조형은 주소 값을 공유해서 여러 변수에 공유가 되니, 다른 변수 하나가 다른 참조값을 조작한다면? 전체적으로 공유 받는 중인 변수들의 값도 바뀐다!(참조값이 바뀌는게 아님, 참조값이 공유되고 있는 객체의 필드값 말하는거임) 이걸 우리는 사이드 이펙트라고 한다! 그럼 사이드 이펙트가 뭐냐? 위에서 말했다싶이 예를 들어 참조값을 공유 받고 있는 한 변수가 값을 변경하여 공유 받고 있는 모든 변수들이 영향을 받는 것을 말한다.이러한 여러 변수가 하나의 객체를 참조하는 공유 참조의 문제점을 막을 방법이 없을까?라고 생각이 들거..
최상위 부모인 Object 클래스 자바에서 모든 클래스의 최상위 부모는 Object 클래스이다.그래서 모든 클래스들은 묵시적으로 extends Object를 상속 받는다! class Parent extends Object { //묵시적 상속 (생략 가능) System.out.println("부모");}class Child extends Parent { // 명시적 상속 System.out.println("자식");} 그래서 메모리에 Object도 함께 생성 된다. 그럼 메모리 영역에 Object, Parent, Child 클래스가 같이 있다.이러면 뭐다? Parent나 Child는 Object의 부모 또는 조상이기 때문에 Object에 있는 기능들을 상속 받기 때문에 사용할 수 있다! Object를 파라미터로 등록하면 모든 객체들의 인자..