본문 바로가기
Java

[Book] 자바 프로그래밍 입문

by 꿈나무 김땡땡 2024. 7. 11.

01. 자바 프로그래밍 시작하기

  • 빌드(Build): 소스 코드를 컴파일 하여 실행 파일을 만드는 과정 → .class 파일 생성
    • 컴파일 된 실행 파일은 bin 폴더에 들어 있음
      • bin = binary
      • 확장자: .class

02. 변수와 자료형

  • 컴퓨터는 2진수 (0 또는 1) 사용
    • 최소 단위: bit (0또는 1)
      • A → 1000001 : ASCII 값
    • 1 byte = 8 bit
  • [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)
      • 클래스 외부 (데이터 영역 메모리에 생성)
  • static 응용 - 싱글톤 패턴 (디자인 패턴)
    • 싱글톤 패턴: 인스턴스를 단 하나만 생성하는 디자인 패턴
  • 배열 복사하기
    • 얕은 복사(shallow copy): 주소 값만 복사
    • 깊은 복사(deep copy): 인스턴스 만들고 그 값을 복사

08. 상속과 다형성

  • 상위 클래스의 생성자가 먼저 호출 → 하위 클래스의 생성자가 다음에 호출
    • heap 메모리
    • super: 상위 클래스의 주소(참조값) 가지고 있는 예약어

객체 지향 프로그래밍

  1. 다형성(Polymorphism): 하나의 코드가 여러 자료형으로 구현되어 실행 되는 것 (같은 코드에서 여러 실행 결과가 나오는 것)
    1. 동물 (move) → 강아지(4발로 뛴다), 사람(2발로 뛴다)
  2. 캡슐화 (Encapsulation) : 객체의 상태(데이터)를 외부에서 직접 접근 불가 (메서드를 통해서만 접근 가능)
    1. 데이터의 무결성 보호 (데이터 변형/손실/손상 없이 일관된 상태 유지)
    2. 클래스 내부의 구현 숨김
  3. 상속 (Inheritance) : 기존 클래스(부모)의 속성과 메서드를 새로운 클래스(자식)가 물려받아 사용
    1. 코드의 재사용성 증가
    2. 계층 구조 형성 가능
    3. IS-A 관계에서 가장 효율적: 일반 클래스를 점차 구체화
      1. ↔ HAS-A (한 클래스가 다른 클래스 소유) : 멤버 변수로 사용
  4. 추상화 (Abstraction) : 복잡한 시스템에서 필요한 부분만 간략화 하여 보여줌
    1. 객체 지향 프로그래밍은 인터페이스, 추상 클래스를 통해 구현

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

댓글