Java #2

yeolyeol·2024년 7월 16일
0

ssafy12

목록 보기
11/32
post-thumbnail

비가 올 듯 말 듯 기상청도 어지러워 하는 날이다


라이브 강의 #1

객체지향

주변의 많은 것들을 객체화 해서 프로그래밍

객체지향 프로그래밍

특징

  • 추상화 : 현실의 객체를 추상화 해서 클래스를 구성
  • 다형성 : 하나의 객체를 여러 가지의 타입으로 참조
  • 상속 : 부모 클래스를 물려 받으면서 그 자식이 부모의 메소드를 재정의하면서 사용
  • 데이터 은닉 및 보호 : 데이터를 외부에 노출시키지 않고 메서드를 이용해 보호

객체지향 프로그래밍의 장점

  • 신뢰성이 높음
  • 추가/수정/삭제가 요잉
  • 재사용성이 높음

현실과 OOP의 관계

  1. 현실 객체가 갖는 속성과 기능은 추상화되어 클래스에 정의
  2. 클래스는 구체화 되어 프로그램의 객체가 됨.
  3. 설계도는 하나의 Type이 되고 이를 통해 나온 제품을 객체라 부르며 그 주체가 사용함.
    • 설계도 == Class, 객체 == new Class()를 통해 나온 인스턴스

프로그램의 클래스와 객체

클래스

  • 객체를 정의해 놓은 것. == 객체의 설계도
  • 클래스는 직접 사용 X.

객체(instance, object)

  • 클래스를 데이터 타입으로 메모리에 생성되어 실제로 동작하는 것

예시


🔺왼쪽은 클래스, 오른쪽은 클래스를 객체로 구체화 한 것

JVM 메모리 구조

meta-space

  • 클래스 정보를 처리
    • 타입 정보
    • Field 정보
    • Method 정보

stack

  • 메서드들의 실행 공간
    • thread 별로 별도 관리
    • 메서드 호출 시 마다 메서드 프레임 적층
    • 메서드 프레임에 로컬변수도 쌓이는 구조

heap

  • 객체를 저장하기 위한 영역
    - thread에 의한 공유
    - 객체가 생성되고 G.C에 의해 처리
    - 상수 풀

라이브 강의 #2

변수

인스턴스 멤버 변수

  • 선언 위치 : 클래스 {}에 선언
    public class Person{
    	String name;
        int age;
    }
  • 변수가 생성될 때 heap에 객체 별로 생성
  • 타입 별로 default 값으로 초기화 됨
  • 접근 방법 : 인스턴스로 생성 후, 그 객체로 접근
  • 소멸 시점 : G.C에 의해 객체가 없어질 때

클래스 멤버 변수

  • 선언 위치 : 클래스 {}안에 static키워드를 붙여 선언
    public class Person {
    	static String scientificName = "Homo Sapiens";
        String name;
    }
  • 클래스 로더에 의해 클래스가 로딩될 때 heap에 클래스 별로 생성
    • 개별 객체의 생성과 무관하며 모든 객체가 공유(== 공유변수)
  • 객체 생성과 무관하게 클래스 이름으로 접근
    Person p = new Person();
    p.scientificName = "객체로 변경"; // static에 부합한 표현
    Person.scientificName = "클래스로 변경"; // 👍
  • 소멸 시점 : 클래스가 언로드 될 때 G.C 발생

지역 변수 & 파라미터 변수

  • 변수 생성 : stack의 메서드 프레임 내부의 영역에 적재

메서드

⚠기본형 변수와 참조형 변수⚠

  • 메서드 호출 시 파라미터로 입력된 복사해서 전달
  • Java는 call by value
    1. 5
    2. 5 : change1 메서드에 cbt.memberVar의 값인 5를 복사 하여 넣었기 때문에
    3. 105 : cbt가 가리키는 주소 값을 복사 -> 그 주소 값이 가리키는 memberVar의 값을 변경

생성자

기본 생성자

  • 파라미터가 없고 구현부가 비어있는 형태
  • 또한, 생성자 코드가 없으면 컴파일러가 자동으로 제공

파라미터가 있는 생성자

  • 일반 멤버 변수의 초기화를 목적으로 파라미터에 값을 넣는 생성자
  • ⚠ 단, 파라미터가 있는 생성자를 만들면 컴파일러가 기본 생성자를 자동으로 제공하지 않음. 즉, 기본 생성자가 필요하다면 직접 만들어야 함.

this.

  • 참조 변수로써 객체 자신을 가리킴. 자신의 멤버 변수에 접근
  • 객체에 대한 참조 (-> static 영역에는 접근 X)

this()

  • 생성자를 오버로딩할 때 사용.
  • 한 생성자에서 다른 생성자 를 호출할 때 사용
  • 첫 줄에만 this() 사용. (단, 최신 Java 버전에는 다른 줄에도 사용 가능)

점심

날치알밥.
비빔밥 아님.
왼쪽 위 어묵.
소세지 아님.


추가

✨변수 종류에 따른 특징 정리✨

종류선언위치변수 종류메모리 영역적재 시점초기화소멸 시점
멤버 변수클래스 영역 ( static keyword )클래스 멤버 변수meta-space클래스 로더에 의해 클래스가 로딩 될 때타입 별 default클래스가 unload 될 때 소멸
클래스 영역인스턴스 멤버 변수heap객체가 만들어질 때타입 별 defaultG.C에 의해 객체가 없어질 때
지역 변수함수 내부지역 변수stack선언된 라인이 실행될 때명시적 초기화 필요선언된 영역에 벗어날 때
파라미터 변수지역 변수stack선언된 라인이 실행될 때명시적 초기화 필요선언된 영역에 벗어날 때

클래스 로드 시 실행 순서


느낀점

자바를 배우고 다루는 사람이라면 필수로 알아야 하는 부분을 배운 느낌이다.
자바를 꽤 많이 그리고 자주 썼다고 생각했지만, 내가 놓치고 몰랐던 부분이 많아 놀라웠다.
특히, CS 면접 준비할 때보다 더 깊은 부분은 공부한 것 같아 뿌듯한 기분도 든다.
싸피 굿

profile
한 걸음씩 꾸준히

0개의 댓글

관련 채용 정보