01. 자바 프로그래밍 시작하기
- 빌드(Build): 소스 코드를 컴파일 하여 실행 파일을 만드는 과정 → .class 파일 생성
- 컴파일 된 실행 파일은 bin 폴더에 들어 있음
- bin = binary
- 확장자: .class
- 컴파일 된 실행 파일은 bin 폴더에 들어 있음
02. 변수와 자료형
- 컴퓨터는 2진수 (0 또는 1) 사용
- 최소 단위: bit (0또는 1)
- A → 1000001 : ASCII 값
- 1 byte = 8 bit
- 최소 단위: bit (0또는 1)
- [Q] 2의 보수 구하는 법? (음수여야 함)
03. 자바의 여러가지 연산자
- A && 명령문 : A가 참이면 명령문 실행
- A || 명령문 : A가 거짓이면 명령문 실행
05. 클래스와 객체 1
- 객체 지향 프로그램: 어떤 대상(객체)을 가지고 프로그래밍 한다.
- 객체: 의사나 행위가 미치는 대상
- 클래스: 객체의 속성과 기능을 코드로 구현한 것
- 멤버 변수(= 속성(property), 특성(attribute)): 클래스 내부에 선언해 객체 속성을 나타내는 변수
- 멤버 함수 (=메서드(method)): 클래스 내부에서 멤버 변수를 사용해 클래스 기능을 구현한 것
- 함수는 스택(stack) 메모리에 공간 할당 됨
- 지역 변수: 함수 내에서만 사용하는 변수. 스택 메모리에 생성
- public class Student { // 멤버 변수 int studentID; String studentName; int grade; String address; // 메서드 public bvoid showStudentInfo() { System.out.println(studentName + " " + address); } }
- 인스턴스: 클래스가 메모리 공간에 생성된 상태
- 생성된 클래스의 인스턴스가 객체
- 인스턴스 생성시 힙(heap) 메모리 공간 할당
- 힙 메모리: 동적 메모리(dynamic memory). 객체가 생성될 때 사용하는 공간. 힙은 동적으로 할당되며 사용이 끝나면 메모리 해제 필요
- 참조 변수: 힙 메모리에 생성된 인스턴스
- 패키지: 클래스 파일의 묶음
용어 설명
객체 | 객체 지향 프로그램의 대상, 생성된 인스턴스 |
클래스 | 객체를 프로그래밍 하기 위해 코드로 만든 상태 |
인스턴스 | 클래스가 메모리에 생성된 상태 |
멤버 변수 | 클래스의 속성, 특성 |
메서드 | 멤버 변수를 이용하여 클래스의 기능을 구현 |
참조 변수 | 메모리에 생성된 인스턴스를 가리키는 변수 |
참조 값 | 생성된 인스턴스의 메모리 주소 값 (e.g. 클래스이름@주소값) |
- 생성자(Constructor): 클래스를 처음 만들 때 멤버 변수나 상수 초기화
- public class PersonTest { public static void main(String[] args) { Person personLee = new Person(); // Person() : constructor } }
- 정보 은닉(information hiding) : 클래스 내부에서 사용할 변수나 메서드는 private로 선언 → 외부에서 접근 불가
- get(), set() 으로 접근
06. 클래스와 객체 2
- this : 생성된 인스턴스 스스로를 가리키는 예약어 (자신의 메모리를 가리킴)
- print(this) 하면 class이름@주소 반환
- static 변수 (= 정적 변수, 클래스 변수) : 클래스에서 공통으로 사용하는 변수
- 다른 클래스도 사용 가능
- static int serialNum
- 클래스 내부에서 선언 → 프로그램 실행 되어 메모리 올라갔을 때 딱 1번 메모리 공간 할당 (데이터 영역 메모리) → 그 값을 모든 인스턴스가 공유
- static 메소드 (=클래스 메소드) : static 변수를 위한 메소드
- 인스턴스 변수(=멤버 변수)는 static 메소드 내부에서 사용 불가
- 변수 유효 범위
- 지역 변수(local variable)
- 함수 내부 (stack)
- 멤버 변수(instance variable)
- 클래스 내부 (heap)
- static 변수(class variable)
- 클래스 외부 (데이터 영역 메모리에 생성)
- 지역 변수(local variable)
- static 응용 - 싱글톤 패턴 (디자인 패턴)
- 싱글톤 패턴: 인스턴스를 단 하나만 생성하는 디자인 패턴
- 배열 복사하기
- 얕은 복사(shallow copy): 주소 값만 복사
- 깊은 복사(deep copy): 인스턴스 만들고 그 값을 복사
08. 상속과 다형성
- 상위 클래스의 생성자가 먼저 호출 → 하위 클래스의 생성자가 다음에 호출
- heap 메모리
- super: 상위 클래스의 주소(참조값) 가지고 있는 예약어
객체 지향 프로그래밍
- 다형성(Polymorphism): 하나의 코드가 여러 자료형으로 구현되어 실행 되는 것 (같은 코드에서 여러 실행 결과가 나오는 것)
- 동물 (move) → 강아지(4발로 뛴다), 사람(2발로 뛴다)
- 캡슐화 (Encapsulation) : 객체의 상태(데이터)를 외부에서 직접 접근 불가 (메서드를 통해서만 접근 가능)
- 데이터의 무결성 보호 (데이터 변형/손실/손상 없이 일관된 상태 유지)
- 클래스 내부의 구현 숨김
- 상속 (Inheritance) : 기존 클래스(부모)의 속성과 메서드를 새로운 클래스(자식)가 물려받아 사용
- 코드의 재사용성 증가
- 계층 구조 형성 가능
- IS-A 관계에서 가장 효율적: 일반 클래스를 점차 구체화
- ↔ HAS-A (한 클래스가 다른 클래스 소유) : 멤버 변수로 사용
- 추상화 (Abstraction) : 복잡한 시스템에서 필요한 부분만 간략화 하여 보여줌
- 객체 지향 프로그래밍은 인터페이스, 추상 클래스를 통해 구현
09. 추상 클래스 (Abstract Class)
- 하나 이상의 추상 메서드(구현 되지 않은 메서드)를 가질 수 있음
- 추상 메서드: 함수 선언부(반환 값, 함수 이름, 매개변수)만 정의
- 하위 클래스가 어떤 클래스냐에 따라 구현 코드가 달라지는 경우
- 상속을 하기 위해 만든 클래스. 직접 인스턴스 생성 불가
- 추상 메서드: 함수 선언부(반환 값, 함수 이름, 매개변수)만 정의
- cf) 인터페이스: 모든 메서드가 추상 메서드
- cf) concrete class: 모든 메서드가 구현 되어 있음. 직접 인스턴스 생성 가능
- 추상 클래스 응용 - 템플릿 메서드 (디자인 패턴)
10. 인터페이스 (Interface)
- 인터페이스: 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할
- 다형성을 구현해 확장성 있는 프로그래밍 가능
12. 컬렉션 프레임워크 (Generic)
- 제네릭(Generic) 프로그래밍: 어떤 값이 하나의 참조 자료형이 아닌 여러 참조형을 사용할 수 있도록 프로그래밍 하는 것
- 여러 참조 자료형이 쓰일 수 있는 곳에 특정한 자료형을 지정하지 않고, 클래스나 메서드를 정의한 후 사용하는 시점에 어떤 자료형을 사용할 것인지 지정하는 방식
- T : 자료형 매개변수 (type parapeter)
- 제네릭 클래스의 인스턴스가 생성 되는 순간 자료형이 결정됨
- public class GenericPrinter<T> { private T material; public void setMaterial(T material) { this.material = material; } public T getMaterial() { return material; } }
- 다이아몬드 연산자 <> : 생략된 부분 유추 가능할 때
- 자료형 매개변수 T와 static : static 변수는 T 사용 불가 (static 변수는 인스턴스 변수가 생성되기 전에 생성)
13. 내부 클래스, 람다식, 스트림
- 함수형 프로그래밍: 순수 함수(pure function)를 구현하고 호출해 외부 자료에 부수적인 영향(side effect)을 주지 않도록 구현하는 방식
- 스트림(Stream): 여러 자료의 처리에 대한 기능을 구현해 놓은 클래스
- 배열, 컬렉션 등의 자료를 일관성 있게 처리 가능
'Java' 카테고리의 다른 글
[Java] Java로 배우는 자료구조 : 변수, 배열, 반복문 (0) | 2019.12.16 |
---|---|
[JAVA] BOJ_2739 (0) | 2019.11.22 |
[JAVA] BOJ_2741 (0) | 2019.11.22 |
[JAVA] Exception Handling (0) | 2019.11.20 |
댓글