개요붕어빵틀과 붕어빵 비유는 클래스와 객체의 관계를 설명할 때 흔히들 사용됩니다.하지만,, 이 비유가 정확한지에 대한 의문이 있습니다.전통적 비유의 문제점 (잘못된 메타포)실제로 붕어빵틀과 붕어빵 의 비유가 명확한 설명이 아닐 수 있음실제로 붕어빵틀 붕어빵 = new 붕어빵틀() 설명이 이해가 되시나요..?붕어빵틀이라는 개념의 붕어빵이라니..더 나은 비유붕어빵틀이 붕어빵을 찍어낸다 라는 논리라면금형 기계가 붕어빵틀을 찍어낸다 라는 논리도 성립해야합니다.금형기계 붕어빵틀 = new 금형기계() 와 같은 코드로 이어질 수 있지만, 말이 되지 않을수 있습니다.팩토리붕어빵틀은 붕어빵을 만드는 팩토리입니다.팩토리는 디자인 패턴 중 하나로서, 객체를 생성하는 로직을 캡슐화 하는 것을 목적으로 합니다.클래스와 객체의..
개요객제 지향은 인간의 직관과 생활을 반영한 개발 방식프로그래밍 언어의 발전 & 인간기계어 어셈블리어 → C → C++ → 자바 같이 점점 더 인간 친화적으로 변화해옴포인터의 개념은 인간이 이해하기 어려웠음이로 인하여 객체지향적 접근 방식이 탄생하였습니다객체 지향의 본질현실 세계의 반영임객체 지향 개념은 현실 세계의 사물, 객체 에 기반합니다.함수와 차이점구조적 프로그래밍의 핵심은 함수함수는 코드를 논리적 단위로 분할하는 역할을 수행함BUT객체지향에서는 현실 세계의 사물 을 기반으로 프로그래밍하는 새로운 접근 방식을 제시객체와 클래스?객체세상에 존재하는 모든 것을 의미함.각각 사물은 고유하고 속성과 행위 를 가지고 있음.클래스객체를 분류하는 방법박상준, 김상준, 전상준이라는 이름은 가진 사람은 모두 사람..
개요Java 8 기점으로 격변함Permanent Generation 영역이 사라지게 되고MetaSpace 영역이 등장하였다.Java8 이전의 메모리 구조Permanent Generation정의클래스의 메타데이터와 상수 풀을 저장하는 영역특징힙 영역의 일부였다고 합니다. ㄷ. ㄷ힙 영역을 나눠 사용하는 것이다 보니, 크기가 제한적이여서실제로 Java 8 이전에는 OOM 이 발생하는 상황이 더 잦았다고 합니다Java8 이후의 메모리 구조MetaSpace == MethodArea정의Permanent Generation 영역을 대체하기 위해 등장했습니다.특징Native Memory 에 할당됨제한된 크기가 없음메모리 누수 우려가 낮아졌음STATIC 과 메모리static 변수클래스 로딩 시점에 메모리에 할당됩니다...
HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 변수와 메모리: 전역 변수 쓰지 말라니까요! 에 대한 추가입니다. public class Start5 { static int share; public static void main(String[] args) { share = 55; int k = fun(5, 7); System.out.println(share); } private static int fun(int m, int p) { share = m + p; return m - p; } } main 메서드의 시작 프로그램 시작시 main 메서드가 호출됨 main 메서드의 스택 프레임이 생성되며, 스택영역의 맨 위에 위치합니다 share 변수의 값 할당 main 메서드 내에서..
자바의 상수 풀상수 풀은 JVM 에 존재하는 특별한 영역리터럴 + 상수 값들을 중복 없이 저장할 수 있는 메모리의 한 공간입니다.문자열, 숫자, 클래스 등 다양한 상수 정보가 저장됩니다.상수 풀을 왜 사용하는가?메모리상의 효율상수풀을 사용하는 경우 중복된 데이터 없이 하나의 값만 저장합니다.메모리의 사용량을 DOWN성능 최적화상수 풀에 저장된 값을 재사용함으로써 객체 생성 비용을 줄일 수 있습니다.문자열과 상수풀자바에서의 String 리터럴은 상수 풀에 저장됩니다!같은 문자열 리터럴의 경우 상수 풀에서 동일한 참조를 가리킵니다.물론 new String 연산자를 사용하는 경우에는 값이 동일해도 항상 다른 주소값을 가지겠죠.상수 풀의 위치Java 버전이나 JVM 구현에 따라 상수 풀의 위치나 관리법이 바뀔 ..
필드(Field) vs 속성(Property)필드클래스 내에 정의된 변수입니다.객체의 상태로 저장되며private || protected 로 선언되어 외부에서 직접 접근할 수 없습니다.속성필드의 값을 안전하게 읽거나 변경하기 위한 방법이빈다.getter || setter 메서드로 구현하지만, getter , setter 의 예시는 캡슐화의 관점에서 올바르지 않은 객체 상태 조작이 될 수 있지 않은가?..함수 (Function) vs 메서드(Method)함수독립적으로 실행 가능한 코드 블록입니다클래스와 무관하게 정의하며 사용됩니다.절차적/ 함수형 프로그래밍에서 사용되는 형식의 방법이라고도 볼 수 있습니다.메서드클래스 내에서 정의된 함수해당 클래스의 객체와 연관된 행위를 수행객체의 상태 변경 혹은 객체의 정..