목차
개요
본 포스팅은 앞으로 카카오테크캠퍼스 백엔드 과정에 따른 공부를 기록하는 용도로 사용할 예정이다.
클래스와 멤버 변수
강의에서는 클래스는 객체의 청사진 이라고 표현하고 있다.
코드리뷰를 통해 개념을 쌓아간 나에게도 잘 와닿는 표현이었다. 클래스가 어셈블리 느낌이고 클래스명은 부품의 이름 멤버변수는 구성품 그리고 내부에 계통-장치들은 메소드로 비유할 수 있을것 같았다.
public class 는 외부에 참조가 될수 있는 클래스로 항상 대문자로 표현한다.
생각해보니 프로젝트main 명이나 디렉토리내에 구현한 클래스와 인터페이스 등은 항상 대문자였고 나중에 이러한 public class 를 또 다른 class 에 사용하기 위해 가져올때도 선언시에 변수명을 소문자로 바꾸어주었었다.
class 내에 멤버변수를 선언하여 객체를 정의하고 객체가 가질 속성을 멤버 변수로 역할을 메서드를 만들어 구현한다.
아직 내가 이해는 했지만 남들에게 이해를 시킬정도로의 이해력은 없는것 같다.
class 등 변수명들은 camel notation 으로 구현한다.
camel 낙타등처럼 요철이 있는 모양새로 makeVariableLikeThis 단어 첫글자를 대문자로 만들어서 일종의 띄어쓰기 같은 역할이다.
함수 호출과 메서드
스택의 특징은 LIFO인데 이와 같은 특징을 이용해서 지역 변수들이 사용하는 메모리는 스택 형식으로 할당한다.
지역변수는 함수가 실행되면서 만들어지고 함수가 종료되면 사라져 메모리에서의 할당도 해제해주어야하는 변수이다.
함수의 수행이 끝나면 할당받았던 메모리를 반환 시킨다.
메서드는 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수이다.
C에서는 멤버함수, 자바에서는 메서드
객체의 기능을 구현한다.
메서드의 변수명은 기능하고 연관있게 짓자
학생들의 정보를 받아오는 메서드는 getStudentInfo .. 와 같이 camel notation도 지켜주자
클래스와 인스턴스
객체의 속성을 멤버변수로 표현하여 클래스를 생성하고 객체의 기능을 구현하기 위해 클래스 내부에 메서드를 구현한다.
이렇게 만들어진 클래스들은 아직까지 설계도, 붕어빵 틀이라고 생각하면 되는데 우리는 이것을 메인 함수로 불러와서 (틀을 가져와서) 선언하게 되는데 이게 인스턴스라고 불린다.
우리는 이 인스턴스에 팥을 넣건 슈크림을 넣건 해서 붕어빵을 만들어낸다고 보면된다.
인스턴스와 참조변수
인스턴스를 생성할때 새로 만들어진 인스턴스의 주소를 알기위해서 (붕어빵을 먹고싶어서 찍어냈는데 이게 어디로 갔는지를 모르면 안되서)
이를 참조변수를 선언해서 인스턴스의 주소값을 저장한다.
예시)
Bread.java
public class Bread {
public String name;
public String insideGradient;
public void showBreadInfo() {
System.out.println(name + "," + insideGradient);
}
}
Bread breadRedBean = new Bread();
진한 글씨가 바로 참조변수 이다.
인스턴스 동적 메모리
인스턴스를 생성할때는 동적 메모리에 할당이 되는데
C++에서는 new()를 통해 할당하고 delete()로 할당 해지한다.
C, Python에서는 malloc()를 통해 할당하고 free()로 할당 해지한다.
그야 당연하게 파이썬은 C의 메모리 할당자 라이브러리를 이용한다.
OS 포스팅때 했던 내용인데 메모리는
정적메모리 (데이터 영역)
전역변수, static 변수가 저장됨
동적메모리 (힙 영역)
프로그래머가 할당하는 변수가 저장됨 따라서 프로그램이 실행되는 런타임에 따라서 결정이 된다.
스택 영역
프로그램이 실행되면서 함수를 불러올때 함수 내에 있는 지역, 매개변수를 저장하는 역할을 하기에 컴파일을 하는 시간에 따라서 크기가 결정된다.(함수가 호출되었다가 반환하는 시간대)
아무튼 인스턴스를 생성 = 함수를 사용 = 서비스를 이용 하는 것이기때문에 프로그램이 러닝중에 있어서 사용이 되는 포인터를 통해 주소값을 저장(참조 값)한다.
힙(heap) 영역에 생성된 인스턴스를 참조하는 참조 변수는 스택(stack) 영역에 위치
참조 변수는 인스턴스의 외부에 있고, 해당 인스턴스에 대한 정보를 참조할 수 있다.
*인스턴스의 내부에 있는 변수는 속성(멤버 변수)라고도 할 수 있겠다.
그리고 java는 주기적으로 Gabage Collector을 이용하여 사용하지 않는 메모리를 삭제하는게 이게 또 자바가 보안이 좋은 이유와 관계가 있다.
마무리
아주 깔끔하게 정리해놓으셔서 가져왔다.
객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
'미사용 > KakaoTechCampus' 카테고리의 다른 글
Java기초[5] 예제로 알아보는 static 변수, 싱글톤 패턴 (0) | 2023.04.13 |
---|---|
Java기초[4] this, super와 클래스 상속 (0) | 2023.04.12 |
Java기초[3] 접근제어지시자, 정보은닉 (0) | 2023.04.12 |
Java기초[2] 생성자, 기본 / 참조자료형 (0) | 2023.04.12 |
카카오 테크 캠퍼스 코딩테스트/합격 후기 (12) | 2023.04.05 |