반응형
목록
Spring/스프링 입문을 위한 자바 객체 지향의 원리와 이해 (15)
[꼼꼼한 개발자] 꼼코더
🖌 추상화 실습 쥐 클래스를 추상화하여 클래스와 인스턴스를 만들어보자 아래 그림은 main() 메서드 실행 직전의 T메모리 스냅샷이다 주목할 점은 Mouse의 속성들의 변수 저장 공간이 없다. 이유는 3개 속성 모두 Mouse 클래스에 속하지 않고 Mouse 객체에 속하기 때문. 즉 객체가 생성되야만 힙 형역에 할당되어 변수 공간이 생성된다. Mouse micky = new Mouse();라는 코드가 실행된다. 이때micky라는 참조변수가 가리키는 번지수는 100번이라고 가정한다. 그럼 아래와 같은 T 메모리 구조가 나타난다. 📌 static 예제 위에 설계도를 보면 꼬리(countOfTail)라는 속성이 보인다. 근데 ‘미키마우스’, ‘제리’, ‘찍찍이’ 모두 꼬리는 1개이다. 우리는 여기서 한 공간에..
👀 클래스 vs 객체 = 붕어빵틀 vs 붕어빵 은 잘못된 예시?? 아마 많은 사람들이 들었던 클래스와 객체의 관계의 예시일 것이다. 하지만 붕어빵틀 ↔️ 붕어빵 예시는 ‘클래스와 객체의 관계’의 예시가 ‘아니다’ 아래 코드를 보자. (쉽게 한글로 자바 코드를 흉내 내어 설명해 보겠다.) 뭔가 이상함을 눈치 챘을것이다. 그래도 어렵다면 좀 더 풀어서 설명해 보겠다. 붕어빵 틀을 생산하는 금형 기계가 있고 붕어빵 틀이 붕어빵을 찍어내서 ‘클래스’라고 한다. 그렇다면 같은 논리로 금형기계는 붕어빵틀을 찍어내는 클래스가 된다. 위에 말을 인간적인 말로 번역한다면 > “새로운 금형기계를 하나 만들었더니 붕어빵틀이 되었다..??” 이해가 어려운 예제이다. 금형기계와 붕어빵틀이 클래스와 객체 관계가 아니듯 붕어빵 틀..
👦🏻 객체 지향은 인간 지향이다 프로그래밍 언어의 발전사를 보면 개발자를 더욱 편하고 이롭게 하기 위한 과정이다. 기계중심의 기계어에서 조금 더 인간을 편하게 하는 어셈블리어 C, C++, 자바로 발전해 온 과정 모두 로우 레벨의 기계가 아닌 하이 레벨의 인간을 배려하기 위한 과정이었던 것이다. 그렇지만 절차적/구조적 프로그래밍까지의 과정은 인간이 기계를 이해하려는 노력에서 크게 벗어나지 못했다. 특히 포인터의 개념은 기계 수준으로 눈높이를 낮추지 않으면 이해하기 매우 힘들다. 그때 “우리가 왜 기계 종속적인 개발을 해야 하지?”라는 생각과 동시에 “우리가 눈으로 보고, 느끼고, 생활하는 현실 세계처럼 프로그래밍을 해보자!”라는 고민 끝에 객체 지향 개념이 탄생했다. 기존의 구조적 프로그래밍 언어에서 가..
❓필드 vs 속성, 함수 vs 메서드 필드는 영어, 속성은 한글, 함수는 한글, 메서드는 영어? 그렇다면 한글 → 영어, 영어 → 한글로 바꿔보자. 필드 → 지역 속성 → 프로퍼티 함수 → 펑션 메서드 → 방법 눈치챘을지 모르지만 함수라는 말과 메서드라는 말을 둘 다 사용해도 괜찮다. 하지만 객체 지향 프로그래밍을 배울 때 늘 비교되는 것이 절차적 / 구조적 프로그래밍이다 절차적 / 구조적 프로그래밍에서 전역변수를 필드라고 불렀고 기능적 요소를 함수라고 불렀다. 객체 지향 프로그래밍에서 같은 일을 하지만 이름을 그대로 따라 쓰자니 차별화가 없다고 생각했나 보다. 그래서 객체지향에서는 전역변수는 프로퍼티라고 부르고 함수를 메서드라고 부르기 시작했다. Field = 필드 = 속성 = 프로퍼티 = Proper..
👀 멀티 스레드(Multi Thread) 멀티 스레드의 T 메모리 모델은 스택 영역을 스레드 개수만큼 분할해서 쓰는 것이다. 멀티 스레드는 하나의 T 메모리만 사용하는데 스택 영역만 분할해서 사용하는 구조이다. 멀티 스레드는 하나의 스레드에서 다른 스레드의 스택 영역에는 접근할 수 없지만 스태틱 영역과 힙 영역은 공유해서 사용하는 구조이다. 따라서 멀티 프로레스 대비 메모리를 적게 사용할 수 있는 구조이다. 👀 멀티 프로세스(Multi Process) 멀티 프로세스는 다수의 데이터 저장 영역, 즉 다수의 T 메모리를 갖는 구조다. 멀티 프로세스는 각 프로세스 마다 각자의 T 메모리가 있고 각자 공유의 공간이므로 서로 참조할 수 없다. 멀티 프로세스는 하나의 프로세스가 다른 프로레스의 T 메모리 영역을 절..
🎁 지역 변수와 메모리 : 스택 프레임에 갇혔어요! 질문을 해볼 테니 답을 해보자 질문) “변수는 메모리에 있다” 답 > “예” 정답이다. 그렇다면 또 다른 질문을 해보겠다. 질문 > “변수는 T 메모리 구역(스태틱, 스택, 힙) 중 어디에 있을까? 답 > “세군데 모두” 정답이다. 그런데 세 군데 각각에 있는 변수는 각기 다른 목적을 가진다. 그리고 각각의 이름도 지역변수, 클래스 멤버 변수, 객체 멤버 변수로 다르다. 🏞 지역 변수 지역변수는 스택영역에서 일생을 보낸다. 그것도 스택 프레임 안에서 일생을 보낸다. 따라서 스택 프레임이 사라지면 함께 사라진다. ⚡️ 클래스 멤버 변수 클래스 멤버 변수는 스태틱 영역에서 일생을 보낸다. 스태틱 영역에 한 번 자리를 잡으면 JVM이 종료될 때까지 고정된(s..
👀 변수와 메모리 : 변수! 너 어디 있니? 👨🏻💻 예제코드 코드 실행의 5번째 줄 실행 후 T메모리 상황은 아래와 같다(종이와 펜을 가지고 그려볼 수 있어야 한다.) 6번째 줄 실행 시 변수 공간을(i) 마련한다 7번째 줄 실행시 i 변수 공간에 10을 저장된다. 9번째 줄은 d라는 ‘변수 공간이 마련’ 되는 즉시 ‘20.0’라는 값을 저장한다. 이때 중요한 점은 명령문이 '한 개가 아닌 두 개'이다. 10번째 줄은 닫는 중괄호호 ‘}’ main 메서드 스택 프레임이 스택 영역에서 사라진다. (프로그램 종료) 🧱 블록 구문과 메모리 : 블록 스택 프레임 👨🏻💻 예제 코드 6번줄 까지 실행한 후 T 메모리 그림이다 8번째 구문에서 실행할 부분은 if 블록이다. i가 10이 맞으면(true). if 블..
🔎 다시 보는 main() 메서드 : 메서드 스택 프레임 main() 메서드는 프로그램이 실행되는 시작점이다. main() 메서드가 실행될 때 메모리, 특히 T 메모리에서는 어떤 일이 일어날까? 아래 예제 Start.java가 한 줄씩 실행될 때마다 T 메모리가 어떻게 변화하는지 살펴보자. T 메모리 구조는 그림과 같다. 그림에서는 어떤 요소들이 각 영역을 사용하게 될지 비유적으로 표현했다.(해당 비유를 잘 기억하고 외우자) JRE는 먼저 프로그램 안에 main() 메서드가 있는지 확인. 존재한다면 JRE는 프로그램 실행을 위한 사전 준비, 다시 말 해 가상의 기계인 JVM에 전원을 넣어 부팅. 부팅된 JVM은 목적파일을 받아 그 ‘목적 파일을 실행’. JVM은 가장 먼저 java.lang 패키지를 T메..