자바 프로그래밍 자바의 역사 : 1991년 제임스 고슬링을 비롯한 선 마이크로 시스템스 연구원들이 처음 개발하였다. 냉장고와 같은 가전제품과 휴대용 장치에서 오류가 생겨 다운이 안되도록 안정성을 중요시하는 소프트웨어 언어로 개발되었다 자바 프로그래밍의 특징 C와 다르게 JVM을 통해 코드를 실행하기에 OS의 영향을 받지 않고 다양한 운영체제에서 사용가능하...
변수 이름 설정 변수명은 대문자, 소문자, 숫자, 특수문자($, _)를 이용하여 정의한다. 변수명의 시작은 숫자로 할 수 없다. ex) 6hours (x) 변수명의 시작은 소문자로 시작한다. 자바에서 이미 정의되어있는 예약어 이름은 사용할 수 없다. ex) continue, while, break 등 가독성이 좋게 만드는 것이 중요하며 student...
Primitive Data type Byte 1byte(=8bit)단위의 동영상, 음악파일, 실행파일의 자료를 처리할 때 사용 short 2byte단위의 자료형으로 C/C++과 호환을 할때 사용한다. int Java에서 사용하는 정수의 기본형이다 4byte 자료형 Int a = 10에서 10과 같이 프로그래에서 사용하는 모든 숫자는 리터럴이라고 하며 ...
Type Conversion 서로 다른 자료형 간에 연산 수행을 위해 하나의 자료형으로 통일하는 것이다. 형 변환은 2가지로 나뉠 수 있다. 묵시적 형 변환(explicit type conversion, 자동 형 변환) 명시적 형 변환(implicit type conversion, 강제 형 변환) 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동...
Constant(상수) 상수는 한번 선언하면 변하지 않는 수이다. 변하지 않는 값을 반복하여 사용할 때 사용한다. 예약어 final을 사용하여 선언한다. 👨🏻💻 Code Reference [Fast Campas] 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
Assignment Operator (대입 연산자) 변수에 다른 변수나 값을 대입하는 연산자 이항 연산자 중 우선순위가 가장 낮다. a = b (b는 변수 또는 식, 값) 산술 연산자 복합대입 연산자 증가, 감소 연산자 단항 연산자로 변수의 값에 1을 더하거나 뺄 때 사용한다. ++, --의 위치가 변수의 앞/뒤에 있는 위치에 따라 연산하는 시점이 달...
관계 연산자 연산의 결과가 True/False로 반환되며 비교 연산자라고도 한다. 조건문, 반복문의 조건식으로 많이 사용된다. 👨🏻💻 Code 논리 연산자 관계 연산자와 함께 많이 사용되며 결과가 True/ False로 나온다. 👨🏻💻 Code Reference [Fast Campas] 한번에 끝내는 Java/Spring 웹 개발 마스...
Short circuit evaluation (단락 회로 평가) 논리연산에서 모든 연산이수행되지 않는 경우를 short circuit evaluation이라고 한다. && 연산의 경우 앞의 항이 false이면 뒤의 항은 계산하지 않으며 || 연산의 경우 앞의 항이 True면 뒤의 항을 계산하지 않는다. 👨🏻💻 Code 📊 Result Refe...
접근 제어 지시자 (accesss modifier) 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능하다. 상속 관계라도 패키지가 다르면 접근 불가하다. private : 같은 클래스 내부에서만 접근 가능하다. 풀어서 말하면 외부 클래스...
Encapsulation (캡슐화) 캡슐화는 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는게 핵심입니다. 캡슐화는 정보은닉을 활용하여 한다. 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현 하게 한다. 캡슐화를 하면 객체에 직접적인 접근을 막고 외부에서 내부의 정보에 ...
Static변수 회사에서 사원이 입사할 때마다 발급하는 사원번호, 학생의 학번 생성 등 여러개의 인스턴스에서 공유하는 변수가 필요한 경우에는 Static변수를 사용한다. Static변수는 인스턴스의 생성과 상관없이 사용이 가능하므로 인스턴스가 아닌 클래스의 이름으로 직접 참조한다. Static변수는 다른 멤버 변수와는 다르게 인스턴스가 생성될 때 만들어...
Singleton Pattern (싱글톤 패턴) 프로그래밍을 하다보면 여러개의 인스턴스를 만들었을 때 문제가 발생하는 경우가 존재한다. (ex. 동일한 날짜를 표시하는 객체, 하나의 회사라는 객체) 이러한 경우 프로그램 내에 단 하나의 인스턴스만 생성하여 사용하는 싱글톤 패턴을 사용한다. 싱글톤 패턴은 static variable, method를 활용하...
배열 (Array) Java의 배열은 C의 배열과 같게 동일한 자료형의 데이터를 순차적으로 넣는 구조이다. 배열은 물리적 위치와 논리적 위치가 동일하며 위치의 시작은 0부터 시작한다. 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용한다. 배열 선언 및 초기화 배열 선언하기 배열을 선언하면 int형은 0, double형은 0.0으로 ...
Class상속 상속 기능을 사용하면 이미 구현되어있는 class를 이용하여 속성이나 기능들을 확장하여 새로운 class를 만들 수 있다. 기존 클래스보다 더 구체적이고 새로운 기능을 가진 클래스를 구현해야할 때 상속을 한다. > 상속하는 클래스 : 상위 클래스, parent class, base class, super class 상속받는 클래스 : 하위...
Overriding 상위 클래스에서 정의된 method의 내용을 하위 클래스에서 동일한 이름으로 method를 재정의 하는 것을 의미한다. ex) VIP고객들의 요금계산을 하는 매서드인 calcPrice()는 상위 클래스인 일반 클래스의 calcPrice() 매서드와 맞지 않아 재정의가 필요하다. > annotation 위의 코드의 @overriding...
Polymorphism (다형성) 하나의 코드가 여러 자료형으로 구현되어 실행되는 능력을 의미하며 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하며 구현을 한다. 같은 코드에서 여러 다른 실행 결과가 나오게 할 수 있으며 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들수 있다. 정보은닉, 상속과 더불...
추상 클래스 추상 매서드(Abstract method) : 구현 코드 없이 매서드의 선언만 있는 것을 의미한다. ex) int add(int x, int y); 위에서 설명한 추상 매서드를 가진 클래스를 추상 클래스라고 하며 추상 매서드는 하위 클래스가 상속하여 구현한다. 추상 매서드를 가진 클래스는 무조건 추상 클래스로 만들어야한다. 추상 클래스를 ...
Interface 인터페이스는 클래스나 프로그램이 제공하는 기능을 명시적으로 선언하여주는 클래스나 프로그램이 제공하는 명세이다. 인터페이스를 사용하면 클라이언트 프로그램들은 인터페이스에 선언된 메서드 명세만을 보고 이를 구현한 클래스를 사용할 수 있어서 편리하다. 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현...
String class 위의 코드는 String class를 만드는 두가지 방법을 나타낸다. 두가지 방법은 보기에는 같은 결과가 나온다고 생각할 수 있지만 내부적으로는 다른 결과를 낸다. str1의 경우는 new String을 사용하여 힙 메모리에 새로운 인스턴스를 생성이 된다. 반면에 str2의 경우는 상수 풀(constant pool)의 "abc"의...
Class 클래스 컴파일 된 class파일을 로드하여 객체를 동적으로 로드하고 정보를 가져오는 메서드를 제공하는 클래스이다. Class.forName("클래스 명") 메서드를 통해서 클래스를 동적으로 로드할 수 있다. > 동적로딩 컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행(runtime) 중에 데이터 타입을 binding 하는 방법...
Object Class 모든 클래스의 최상위 클래스로 모든 클래스들은 컴파일러가 자동으로 extends Object를 추가하여 java.lang.Object를 상속받는다. class Student => class Student extends Object Object 클래스의 일부는 재정의를 하여 사용할 수 있다. ex) toString(), equals(...
Generic class / Programming 프로그래밍을 하다보면 여러 자료형이 쓰일 수 있는 변수가 존재할 경우 이 변수를 기반으로 클래스를 만들어야 할 것이다. 이런 경우 비슷한 코드를 자료형에 따라 여러개의 클래스를 만들게 된다면 overhead가 발생할 것이다. 우리는 이러한 상황이 발생하는 경우 여러 자료형을 담을 수 있는 Generic c...
Collection Framework란? 자바의 컬렉션 프레임워크란 여러 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스들의 집합을 의미한다. 프로그램 구현에 필요한 자료구조(Data Structure)를 구현해 놓은 JDK 라이브러리로 java.util 패키지에 구현되어 있다. 컬렉션 프레임워크를 사용하면 개발에 소요되는 시간...
Iterator<E> 인터페이스 컬렉션 프레임워크에서 컬렉션에 저장되어있는 요소들을 읽어오는 표준화된 방법이다. Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있어 Collection 인터페이스를 상속 받는 List와 Set인터페이...
ArrayList ArrayList는 가장 많이 사용되는 collection 클래스 중 하나이다. ArrayList는 객체 배열을 좀더 효율적으로 관리하기 위해 자바에서 제공해 주는 클래스이며 java.util 패키지에서 제공된다. 앞서 배운 기본 배열은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야 했으며 배열의...
LinkedList LinkedList는 ArrayList와 같이 List를 구체화한 클래스이다. ArrayList는 하나의 큰 배열을 사용하여 구현하였다면, LinkedList는 각각의 node를 연결하는 방식을 사용한다. LinkedList는 양뱡향 연결 리스트(Doubly Linked List)로 구현되어있다. node들은 이전과 다음 node의...
HashSet Class HashSet은 set interface를 구현한 컬렉션 클래스로서 데이터의 중복 저장을 허용하지 않으며 저장 순서 유지를 하지 않는다는 특징이 있다. Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashSet class는 Hash Algorithm을 사용하여 검색 속도가 빠르다. 멤버들의 중복 여부를 체...
TreeSet set interface를 구현한 컬렉션 클래스로서 데이터의 중복 저장을 허용하지 않으며 저장 순서 유지를 하지 않는다는 특징이 있다. TreeSet은 객체의 정렬에 사용하는 클래스로 내부적으로 Binary Search Tree를 구현하여 정렬을 한다. HashSet의 경우 Key값이 중복되는 지를 체크만 하였지만 TreeSet은 중복 체...
Map<K, V> Collectio interface와 다르게 key-value의 쌍으로 이루어지는 객체를 저장한다. 객체들 간의 순서가 없다. 객체들의 Key는 중복을 허용하지 않지만 value는 중복을 허용한다. 쌍으로 이루어진 객체를 관리하는데 사용하는 메서드들이 선언되어 있다. HashTable, HashMap, Properties, ...
내부 클래스란? 클래스 내부에 선언한 클래스로 일반적으로 내부 클래스를 감싸고 있는 외부 클래스와 연관이 있으며, 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스를 선언해서 사용한다. 내부 클래스는 중첩 클래스라고도 한다. 내부 클래스의 종류 인스턴스 내부 클래스 정적(static) 내부 클래스 지역(local) 내...
람다식과 함수형 프로그래밍 자바는 객체지향 프로그래밍으로써 특정 기능을 수행하기 위해서는 객체를 만들고 객체 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현하였다. 하지만 Java8부터 자바는 함수형 프로그래밍 방식을 지원하였으며 우리는 이것을 람다식이라고 부른다. 함수형 프로그래밍(Functional Programming: FP) 함...
Stream이란? 자료의 대상과 관계없이 동일한 연산을 수행하며 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 해주는 것이다. 배열, 컬렉션을 대상으로 연산을 수행ㅇ하며 자료 처리에 대한 추상화가 구현되었다. 한번 생성하고 사용한 스트림은 재사용 할 수 없다!! 스트림을 생성하여 연산을 수행하면 해당 스트림은 소모되고 다른 연산을 수행하기 위해서는 ...
예외 처리의 두가지 목적 예외처리는 시스템이 비정상 종료가 되는 것을 피하고 시스템이 월할하게 실행되도록 한다. 오류가 발생한 경우 log를 남겨서 추후 개발자가 log파일 분성을 통해 그 원인을 파악하고 버그를 수정하기 위해서 남긴다. > ※ 위의 두개의 목적을 이루기 위해 예외처리는 필수적으로 해줘야한다. 로그는 기업마다 로그를 남기는 format이 ...
사용자 정의 예외 클래스 프로그래밍을 하다 보면 자바에서 제공하는 예외 클래스외에 직접 만들어야하는 예외들이 존재할 것이다. 이러한 경우 프로그래머들은 예외 클래스를 직접 만들어 사용한다. 사용자 정의 예외 클래스는 기존 예외 클래스중에서 가장 유사한 예외 클래스를 상속받아 만든다. 기본적으로는 Exception 클래스를 상속해서 만들 수 있다. 👨...
Logging이란? 시스템 운영에 대한 기록으로 오류가 발생했을 때 그 오류에 대하 기록을 남겨 디버깅을 할 떄 사용할 수 있다. 프로그래밍을 할 때는 로그 파일에 기록하는 코드를 추가하여 필요한 정보가 로그로 남을 수 있도록 한다. 디버깅, 시스템 에러 추적, 성능과 문제점 향상 등을 위해 log를 사용한다. 로그는 너무 적게 남기면 정확한 시스템의...
File class 파일의 개념을 추상화한 클래스이며 파일 입출력 기능은 없고, 파일의 이름, 경로, 읽기 전용 등의 속성을 알 수 있다. 다양한 method들이 존재한다. 👨🏻💻 Example Code > Result isFile(): true isDirectory(): false getName(): newFile.txt getAbsolute...
Thread란? CPU가 동작하는 가장 작은 단위의 unit을 thread라고 한다. Process는 하나 이상의 thread를 갖게되며 thread는 작업 수행의 단위이다. 사용자들이 2개의 같은 program을 이용하는 경우는 program들은 same code를 실행하고 data들을 공유하고 싶을 것이다. 그래서 code와 data를 같이 공유하며 사...
Multi-thread Programmign의 동기화 Critical Section/ Semaphore Critical Section critical section은 두개 이상의 thread가 동시에 접근하는 경우 문제가 생길 수 있기 때문에 동시에 접근할 수 없는 영역이다. - 각각의 process들은 shared data를 접근하는 부분에...
Array 여러 데이터를 하나의 object로 관리하기 위한 자료구조이다. 논리적 저장 순서와 물리적 저장 순서가 같으며 시작은 0부터 시작한다, Index를 통해 데이터에 접근할 수 있다. (Index가 데이터의 식별자 역할을 한다.) 연속된 메모리 공간에 저장된다. 배열은 정의와 동시에 길이를 지정해야하며 길이를 중간에 바꿀 수 없다. 장점 & 단점 ...