Journey to CS/프로그래밍 언어 17

[Java] 메서드의 메모리 적재 원리와 클래스 선언 규칙

1. 메서드를 메모리에 올리는 두 가지 방법자바에서 메서드는 성격에 따라 메모리에 적재(Load)되는 시점과 방식이 다르다. 1️⃣라이브러리 클래스에서의 메서드보통 기능을 제공하는 역할을 하는 클래스들이다.인스턴스 메서드 (Instance Method): new 연산자를 통해 객체를 생성하는 순간 메모리에 올라간다. 객체마다 고유한 상태(필드)를 가질 수 있으며, 반드시 객체 생성 후에만 사용할 수 있다.정적 메서드 (Static Method): 프로그램이 실행되자마자 메모리(Method Area)에 자동으로 올라간다. 객체 생성 없이 클래스명.메서드명()으로 즉시 호출할 수 있다.2️⃣실행 클래스에서의 메서드public static void main이 포함된, 프로그램의 시작점이 되는 클래스다.프로그램..

[Java] static과 인스턴스 - JVM이 main 메서드를 찾아가는 방법

public, static, 그리고 new 이 세 가지 키워드는 자바의 동작 원리와 메모리 관리 방식을 이해하는 데 중요하다.각 키워드의 역할과 객체 생성 과정에서의 메모리 흐름을 살펴본다. 1. main 메서드가 public이어야 하는 이유JVM(Java Virtual Machine)이 프로그램을 실행할 때, 클래스 외부에서 main 메서드를 찾아 호출해야 한다.만약 main 메서드가 public이 아니라면 JVM은 해당 메서드에 접근할 수 없으며, 프로그램은 시작을 할 수 없다.따라서 main은 항상 외부로 완전히 개방된 public 상태여야 한다. default 접근 제어메서드 앞에 아무런 제어자도 붙이지 않으면 자동으로 default 상태가 된다.이는"같은 패키지 내부"에서만 접근이 가능하다는 뜻..

[Java] 래퍼 클래스(Wrapper Class)와 오토 박싱

자바는 객체 지향 언어지만 성능을 위해 비객체형인 기본형(Primitive)을 지원한다.하지만 제네릭이나 컬렉션 프레임워크처럼 객체만 다룰 수 있는 상황에서는 기본형을 객체로 감싸야 하는데, 이때 사용하는 것이 래퍼 클래스(Wrapper Class) 다.박싱(Boxing)과 언박싱(Unboxing)Boxing: 기본형 → 래퍼 클래스 (int → Integer)Unboxing: 래퍼 클래스 → 기본형 (Integer → int)JDK 1.5부터는 컴파일러가 이를 자동으로 처리해주는 Auto-boxing/Auto-unboxing을 지원한다.덕분에 개발자는 기본형과 래퍼 클래스를 혼용해서 사용할 수 있다.📌코드 예시 : null 처리와 유틸리티 활용래퍼 클래스는 null을 담을 수 있어 DB 연동 시 유용..

[Java] 기본형(Primitive)과 참조형(Reference)의 메모리 구조 차이

자바의 변수는 데이터를 저장하는 방식에 따라 크게 두 가지로 나뉜다.이 둘의 차이는 '데이터가 메모리의 어디에, 어떻게 저장되는가'에 있다.1. 기본형 (Primitive Type)C언어의 일반 변수와 같다.메모리의 스택(Stack) 영역에 실제 값(Literal)을 직접 저장한다. int, double, boolean 등 8가지 타입이 존재하며, null을 가질 수 없다.종류타입 이름크기저장 가능한 값의 예시비고논리형boolean1 bit*true, false조건문(if)에서 주로 사용문자형char2 byte'A', '가', '3'문자 하나만 저장 (작은따옴표 사용)정수형byte1 byte-128 ~ 127파일 데이터 등 매우 작은 단위 short2 byte-32,768 ~ 32,767C언어 호환 외엔..

[파이썬] OOP - 캡슐화 개념과 데이터 은닉, getter/setter 이해하기

지난 포스팅에서는 파이썬의 객체지향 프로그래밍(OOP) 핵심 개념 중 하나인 다형성(Polymorphism)에 대해 알아보았다. 이번 포스팅에서는 데이터 보호와 코드의 안정성에 매우 중요한 역할을 하는 캡슐화(Encapsulation) 개념과 함께 이를 구현하는 getter와 setter 메서드에 대해 자세히 알아보자. 캡슐화란?캡슐화(Encapsulation)는 객체의 내부 상태(속성)를 외부에서 직접 접근하지 못하도록 감추고, 접근을 위한 메서드를 통해 데이터를 간접적으로 제어하는 방법이다.즉, 객체 내부의 데이터 보호와 인터페이스 제공을 목적으로 하며, 불필요하거나 위험한 접근을 제한함으로써 코드의 안정성과 유지보수성을 높여준다. 만약 캡슐화를 통해 객체의 데이터를 보호하지 않으면, 외부에서 내부 ..

[파이썬] os 모듈, 언제 어떻게 쓰면 좋을까?

이번 포스팅에서는 다시 파이썬으로 돌아와 os모듈에 대해 알아본다. 파이썬의 os 모듈은 이름에서 알 수 있듯이 운영체제와 상호작용하는 다양한 기능을 제공하는 라이브러리로, 파일과 디렉토리를 관리하거나 시스템 명령어를 실행하는 등의 작업을 할 때 유용하다. 예를 들어, 운영체제 내의 특정 디렉토리의 파일 목록을 가져오거나, 파일 이름을 수정하고, 디렉토리를 생성하거나 삭제할 때 os 모듈을 사용할 수 있다. 따라서 텍스트, 이미지, 파이썬 파일 등 어떤 종류의 파일이든 다룰 수 있다. os 모듈이 필요한 이유디렉토리나 파일을 핸들링하는 일은 GUI나 CLI에서도 충분히 가능한데 "굳이 왜" 파이썬 os모듈을 사용해야 하는지 의문이 들 수 있다. 하지만 os 모듈은 우리가 일상에서 하는 많은 노가다 업무를..

[파이썬] 중첩 선택 구조 (feat. 놀이공원)

파이썬 프로그래밍에서 조건에 따라 다른 코드를 실행하는 선택 구조는 매우 중요하다. 특히 복잡한 조건을 처리해야 할 때 중첩 선택 구조가 필수적이다. 중첩 선택문은 영어로 Nested if statement라고 한다. Nested라는 단어에서 알 수 있듯, 중첩 선택문은 if문 안에 또 다른 if문이 들어가 있는 구조다. "이 안에 너 있다...."가 갑자기 왜 생각나지..ㅋㅋㅋ 중첩 선택문의 구조중첩 선택문은 다음과 같은 구조를 가진다. if 조건 1: # 조건 1이 참일 때 실행되는 코드 if 조건 2: # 조건 1과 조건 2가 모두 참일 때 실행되는 코드 else: # 조건 1은 참이지만 조건 2는 거짓일 때 실행되는 코드else: # 조건 1이 거짓..

[파이썬] 다형성(Polymorphism) Part 1. 개념 이해하기 (feat. 우주청소로봇)

다형성이란? 다형성(polymorphism)이란 "같은 이름을 가진 기능이 상황에 따라 다르게 동작함"을 의미한다. 비유를 해 보면, 똑같은 단어 "먹다"도 상황에 따라 다르게 쓰인다. "밥을 먹다"일수도 있고, "빵을 먹다"일수도 있다.  마찬가지로 파이썬에서 다형성은 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 이 개념을 코드로 구현한다. 예를 들어 같은 이름의 함수나 메서드를 쓰더라도 어떤 객체(object)를 다루느냐에 따라 결과가 달라질 수 있다.  예를 들어, 우주에서 쓰레기를 수집하는 로봇이 있다고 가정해 보자.  "진공 로봇"은 우주 먼지를 빨아들여 블랙홀 에너지로 바꾼다. "분쇄 로봇"은 고철 조각을 나노 입자로 분쇄해 우주로 ..

[파이썬] 슬라이싱 기본 규칙 - 문자열, 튜플, 리스트

파이썬의 슬라이싱 seq[start:stop:step]은 문자열, 리스트, 튜플 등 시퀀스 타입에서 특정 범위를 추출하는 도구로 다음과 같은 규칙을 갖는다. 1. 기본 구조형식: seq[start:stop:step]start: 시작 인덱스 (포함)stop: 종료 인덱스 (제외, 이 인덱스 직전까지 포함)step: 이동 간격 (기본값 = 1)위 세 매개변수는 모두 선택적이며, 생략 시 기본값이 적용된다. 2. 기본 동작슬라이싱은 start에서 시작해 stop 직전까지 step 간격으로 요소를 추출한다. 인덱스는 0부터 시작하며, 음수 인덱스도 사용 가능하다.  예시: text = "Python"인덱스: P(0) y(1) t(2) h(3) o(4) n(5)음수 인덱스: P(-6) y(-5) t(-4) h(-..

[파이썬] 딕셔너리 - 딕셔너리 내용을 삭제하는 메서드

메서드/키워드 설명인자반환값특징예시del dict[key]특정 키-값 쌍 삭제키없음키가 없으면 KeyError 발생del my_dict['a']dict.pop(key, default)특정 키를 삭제하고 값을 반환키(기본값)삭제된 값키가 없으면 default 반환, 기본값 없으면 KeyError 발생my_dict.pop('a')dict.popitem()마지막 키-값 쌍을 삭제하고 반환없음(키, 값) 튜플파이썬 3.7+부터는 LIFO 순서로 삭제my_dict.popitem()dict.clear()모든 요소 삭제없음없음딕셔너리를 완전히 비움my_dict.clear()** LIFO(Last In, First Out) : 마지막에 들어온 것이 먼저 나가는 원칙. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거됨...