자바는 크게 기본타입, 참조타입으로 분류 기본타입은 정수, 실수, 문자, 논리, 리터럴를 저장하는 타입이다. 참조타입은 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다. 기본타입은 변수에 실제 값을 저장하지만 참조타입은 변수안에 메모리의 번지수를 저장한다. 번지를 통해 객체를 참조한다는 뜻에서 참조타입이라고 부른다. String은 클래스이기 때문에 문자열은 참조타입니다. 기본타입과 참조타입을 알아야 하는건 데이터가 자바에서 메모리 사용영역에 어떻게 할당되는지 알기 위해서이다. 자바에서 메모리 사용영역은 크게 아래 3가지로 나뉜다. [JAVA 메모리 3가지 사용영역] 1. 메서드 영역 : 메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다. 클래스로더로 클..
[시스템 입력장치 출력장치] 프로그래밍 언어에는 시스템 표준 출력장치와 표준 입력장치가 있다. 일반적으로 표준 출력장치는 모니터이고, 표준 입력장치는 키보드이다. 자바 프로그래밍을 하고 결과값을 보기 위해서 아래 코드를 작성 했을 것이다. System.out은 시스템의 표준 출력장치를 말한다. System은 시스템이 가지고 있는, out은 출력 장치로, println()함수는 괄호안의 내용을 출력하고 행을 바꾸라는 뜻이다. System.out.println("출력 내용"); ※ println()은 행을 바꾸라는 뜻인데 행을 바꾸고 싶지 않으면 print() 함수를 사용하면 되고, 다양한 양식으로 출력하고 싶으면 printf() 함수를 알아보면 된다. 위와 반대로 시스템의 입력 장치는 System.in을 ..
[타입 변환] 타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다. 타입변환은 크게 자동 타입 변환(promotion)과 강제타입 변환(casting)이 있다. [자동타입 변환(Promotion)과 강제타입 변환(Casting)] 자동타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생한다. 정수형 끼리 자동 타입 변환은 허용범위가 큰 타입으로 저장하면 되지만 음수 범위가 없는 char 타입으로 자동 변환이 안된다. 정수형은 무조건 실수형으로 자동 타입 변환이 된다. 자동타입 변환과는 반대로 큰 허용 범위 타입에서 작은 허용 범위 타입으로 변하게 할때는 앞에 괄호안에 작은 허용 범위 타입을 써줘야 한다. 실수형을 정수형 타입에 넣을 때도 앞에 타입을 써줘..
[변수] 컴퓨터 메모리(RAM)는 값을 저장할 수 있는 수많은 번지(주소)들로 구성되어 있다. 변수는 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름이다. 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다. 따라서 메모리에 값을 저장하고 싶으면 변수를 써야 하며, 이 변수를 메모리의 어디에 저장하고 어떤 방식으로 저장할지는 프로그래밍 언어와 운영체제가 정한다. 자바의 경우는 JVM이 한다. [변수 사용] 변수 명으로 예약어는 쓸 수가 없는데 예약어는 이미 해당 프로그래밍 언어에서 의미를 갖고 사용되는 단어이다. 만약 사용하면 컴파일 에러가 발생한다. ※ 예약어 ex) boolean, true, try, void, return, private, class, import, fi..
모든 언어에서의 데이터 타입은 크게 원시 타입(primitive type)과 참조 타입(reference type)으로 구분된다. 원시 값은 메모리에 값이 그대로 할당된다. 하지만 참조 타입은 메모리에 실제 값이 있는 주소를 참조한다. 원시타입은 모든 숫자형, char, boolean 등이 있고, 참조 타입은 String, Class, Interface, 배열 등이 있다. String이 참조 타입이니 메모리에 실제 값이 있는 주소를 참조하게 된다. 원래는 메모리 영역이 스택과 힙으로 나눠 져서 구동 되지만 이해를 돕기 위해 하나의 메모리로 그림을 그렸다. 위 처럼 string name과 string name2는 값이 kang 으로 같은 값이지만 메모리의 주소는 다르다. == 는 메모리의 값을 비교 하므로..
자바 8부터 인터페이스의 변화로 기본 메서드와 스태틱 메서드가 추가 되었다. 인터페이스를 구현할때 공통적으로 제공해줬으면 하는 특정한 기능들이 필요되면서 추가된 것이다. 인터페이스를 상속받으면 인터페이스에 정의된 메서드들은 모두 구현이 돼야 한다. 하지만 구현이 안되어도 괜찮고, 그냥 특정한 기능만 있게 할수있도록 변화되었다. 기본 메서드(default method) 사용예제와 제약사항 public interface InterfaceChangeStudy { void printName(); //인터페이스에 정의된 메서드는 모두 public //기본 메서드 default void printNameUpperCase() { System.out.println(getName().toUpperCase()); } St..
콜론 두개(::)가 있으면 메서드 레퍼런스를 사용하는 것이다. 예제에 사용될 Greeting 클래스 public class Greeting { private String name; public Greeting() { } public Greeting(String name) { this.name = name; } public String hello(String name) { return "hello " + name; } public static String hi(String name) { return "hi " + name; } } 1. 스태틱 메서드 참조 Greeting 클래스에 있는 static 메서드 참조 방법 UnaryOperator hi = Greeting::hi; //UnaryOperator hi..
람다 기본 문법 람다 - (인자 리스트) -> {바디} (바디가 한줄일때는 {} 생략 가능) 인자 리스트 - 인자가 없을때 : () - 인자가 한개일때 : (one) 또는 one - 인자가 여러개 일때 : (one, two) - 인자의 타입은 생략가능, 변수선언부에 있는 인자타입으로 컴파일러가 추론하지만 명시할 수도 있다 (Integer one, Integer two) 바디 - 화살표 오른쪽에 함수 본문을 정의한다. - 여러 줄인 경우에 {}를 사용해서 묶는다. - 한 줄인 경우에 생략 가능, return도 생략 가능 함수형 인터페이스로 람다 사용방법 //Supplier 인자값 없이 T타입의 값을 제공하는 함수형 인터페이스 Supplier get10 = () -> 10; System.out.println..
함수형 인터페이스는 추상메서드가 하나만 있는 인터페이스 이다. 자바에서는 이 함수형 인터페이스를 여러개 제공하는데 대표적인 함수형 인터페이스들을 사용해보자 Function Function은 자바에서 제공하는 함수형 인터페이스 이다. T타입을 받아서 R타입을 리턴한다. 만약 이면 Integer 형 매개변수를 받아서 Integer형을 반환한다는 뜻이다. 람다식을 사용하지 않고 사용하려면 클래스에서 Function을 상속받아 사용해야 한다. //Function T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스 public class Plus10 implements Function { @Override public Integer apply(Integer integer) { return integer + 10..
함수형 인터페이스 정의 //추상메서드가 하나만 있으면 함수형 인터페이스다. //@FunctionalInterface 애노테이션을 붙여서 함수형 인터페이스를 정의 할 수 있다. public interface RunSomethinig { //인터페이스는 필드 앞에 abstract 생략 가능 void doIt(); //void doAgain(); @FuctionalInterface 애노테이션이 있으면 에러 발생 //다른 형태의 메서드가 있어도 함수형 인터페이스 이다. static void printName() { System.out.println("kang"); } default void printAge() { System.out.println("31"); } } 함수형 인터페이스는 추상메서드가 하나만 있는 ..
스트림 정의 자바에서 데이터를 외부에서 읽고 다시 외부로 출력하는 작업을 할때 이 데이터는 스트림(Stream)을 통해 입출력된다. 스트림은 단일방향으로 연속적으로 흘러가는 것으로 수도꼭지를 생각하면 된다. 물은 계속 흘러나오는데 수도꼭지를 잠그면 물이 안나오고 풀면 물이 나온다. 스트림은 InputStream(입력 스트림), OutputStream(출력 스트림)이 있는데 프로그램이 데이터를 입력받을때는 InputStream, 보낼때에는 OutputStream 이다. 스트림의 특성이 단방향이여서 입력과 출력을 모두 할 수 없어 스트림이 입력, 출력 따로 있는것이다. 스트림 클래스는 크게 두 종류로 구분되는데 하나는 바이트(byte) 기반, 하나는 문자(character) 기반이다. 바이트 기반은 그림, ..
Java 11 설치 1. 아래 자바 다운로드 설치 url 접속후 macOS Installer dmg 프로그램을 다운로드 한다. 링크 클릭시 Oracle 로그인 화면이 뜨며 로그인을 하면 다운로드 할 수 있다. www.oracle.com/kr/java/technologies/javase-jdk11-downloads.html 2. 설치 후 terminal.app 에서 java -version 을 치면 다운로드 됐는지 확인 IDE IntelliJ 설치 1. 아래 URL 접속 후 IntellJ 툴박스를 설치한다. www.jetbrains.com/ko-kr/toolbox-app/ 2. 툴박스를 실행시켜 IntelliJ를 설치할 수 있는데 Ultimate 버전은 유료 버전이고 Communitity 버전이 무료 버전..