프로그래밍 언어 15

[크래프톤 정글] malloc, calloc, realloc

malloc, calloc, realloc 같은 동적 메모리 할당 함수들은 C 언어의 표준 라이브러리 함수들이다.실제로는 운영체제(OS)에서 제공하는 시스템 호출(syscall)을 통해 메모리를 할당하는 과정으로 이루어진다.1. malloc의 내부 동작malloc은 사용자가 요청한 크기의 메모리를 힙 영역에서 할당하는 함수이다.malloc이 어떤 흐름으로 메모리를 할당하는지 알아보자기본 흐름사용자가 메모리를 요청: malloc에 의해 사용자는 지정한 크기의 메모리를 할당받기를 원한다.힙 영역에서의 메모리 관리: C 프로그램은 스택(Stack)과 힙(Heap)이라는 두 가지 주요 메모리 영역을 사용한다. 힙은 프로그램 실행 중에 동적으로 메모리를 할당하는 데 사용된다. 힙은 연속된 메모리 블록으로 관리되며..

[크래프톤 정글] 구조체 와 클래스 의 차이

1. 클래스와 구조체의 주요 차이점1.1 C와 C++에서의 차이먼저, C에서는 구조체(struct)가 데이터 타입을 정의하는 데 사용된다. C 언어의 구조체는 데이터를 묶어서 하나의 사용자 정의 데이터 타입으로 만드는 역할만 수행하며, 함수나 메서드를 포함하지 못한다. 반면에, C++과 같은 객체 지향 프로그래밍 언어에서는 클래스가 구조체와 유사하지만 더 많은 기능을 제공한다. C++의 구조체는 함수도 포함할 수 있지만, 기본적으로 다루는 접근 제어가 다르고, 객체 지향적인 요소가 약하다.1.2 클래스(C++)와 구조체(C)의 주요 차이점클래스(Class):메서드 포함 가능: 클래스는 변수(멤버 변수)뿐만 아니라, 그 변수를 조작하는 함수(멤버 함수)도 포함할 수 있다.캡슐화: 클래스는 캡슐화를 통해 외..

[크래프톤 정글 ] 포인터

C 언어에서 포인터는 변수의 메모리 주소를 저장하는 변수이다.즉, 포인터는 다른 변수나 메모리 상의 데이터의 위치를 가리키는 역할을 한다. 이로 인해 직접적으로 메모리 주소를 다룰 수 있는 유연성과 강력함을 제공하지만, 그만큼 주의가 필요하다.포인터는 메모리 관리, 함수 매개변수 전달, 동적 메모리 할당 등의 영역에서 중요한 역할을 한다.1. 포인터 선언과 기본 사용법포인터는 메모리 주소를 저장하는 변수이므로, 선언할 때는 데이터 타입 뒤에 *을 붙여 선언한다.int *ptr; // int형 변수를 가리키는 포인터이 선언은 ptr이 int형 데이터를 가리킬 수 있는 포인터임을 의미한다. 하지만 아직 ptr은 유효한 주소를 가리키고 있지 않으므로, 초기화되지 않은 상태에서 이를 사용하면 안 된다.1.1 포..

도메인 계층 과 비니지스 로직

1. 도메인 계층 (Domain Layer)역할: 도메인 계층은 애플리케이션의 핵심 비즈니스 로직과 규칙을 정의한다. 이 계층에서 도메인 객체는 데이터와 해당 데이터에 대한 비즈니스 로직을 캡슐화한다.예시: User 도메인 객체가 비밀번호를 변경하는 비즈니스 로직을 포함한다. 예를 들어, 비밀번호가 올바르게 입력되었는지 확인하고, 새로운 비밀번호로 설정하는 등의 로직이 포함된다.public class User { private String username; private String password; public User(String username, String password) { this.username = username; this.password = pa..

MVC의 계층 과 역활

1. 프레젠테이션 계층 (Presentation Layer)역할: 사용자와 상호작용하는 UI 또는 API를 제공한다. 웹 애플리케이션의 경우, 컨트롤러가 이 계층의 대표적인 구성 요소이다.데이터 이동: 사용자가 입력한 데이터를 받아 서비스 계층에 전달하고, 서비스 계층으로부터 받은 데이터를 사용자에게 반환한다.2. 서비스 계층 (Service Layer)역할: 비즈니스 로직을 처리한다. 프레젠테이션 계층에서 받은 요청을 처리하고, 필요한 경우 데이터 접근 계층에 접근하여 데이터를 조회하거나 수정한다.데이터 이동: 프레젠테이션 계층으로부터 받은 요청 데이터를 비즈니스 로직에 따라 처리하고, 필요한 데이터를 데이터 접근 계층으로부터 가져와 조작한 후, 결과를 프레젠테이션 계층으로 반환한다.3. 데이터 접근 ..

[자바] String Class 의 불변성

자바의 String 클래스와 참조 주소 변경1. String 클래스의 불변성(Immutable)불변성: 자바의 String 클래스는 불변 객체이다. 한 번 생성된 String 객체는 그 내용을 수정할 수 없다.예를 들어, String str = "Hello";는 "Hello"라는 문자열을 가리키는 str 참조 변수를 생성한다. str의 값을 변경하려면 새로운 String 객체가 만들어져야 한다.문자열을 수정할 때마다 새로운 String 객체가 생성되고, 기존의 객체는 그대로 유지된다.2. 참조 주소의 변경참조 변경: 기존 String 객체를 수정하지 않고, 새로운 객체를 생성하여 참조 변수를 변경한다.예시: String str = "Hello";str = str + " World";"Hello" 문자열 ..

[자바] equals overriding 과 hash code

자바에서 ==, equals, hashCode의 차이와 역할== 연산자의 동작객체의 참조 주소를 비교한다.두 객체가 같은 메모리 주소(참조)를 가리키는지 확인한다.참조 변수는 스택 영역에 저장되고, 객체는 힙 영역에 저장된다.따라서, ==는 스택 영역에 있는 두 참조 변수를 비교하여, 같은 객체를 가리키고 있는지 판단한다.Person person1 = new Person("John", 25);Person person2 = new Person("John", 25);System.out.println(person1 == person2); // false를 반환위 예제에서 person1과 person2는 각각 서로 다른 힙 영역에 객체를 가지고 있으므로, == 연산자는 false를 반환한다.equals 메서드의..

자바의 메모리 구조 와 할당

stackArea(스택영역) :지역 변수(local variable) , 매개변수(patameter) 가 할당 되는 영역초기화가 되지 않음heap Area(힙 영역) :배열과 모든 인스턴스 객체가 할당되는 영역자동 초기화가 진행됨.static Area(or Method Area ):소드의 바이트 코드 , static 변수 및 필드 가 할당됨.예시 코드를 보자public class MemoryExample { static int staticField = 10; // static 필드 int instanceField = 20; // 인스턴스 필드 static void staticMethod() { System.out.println("Static Method"); } v..

MYSQL 트랜잭션의 4대 원칙

ACID 원칙은 데이터베이스 시스템에서 트랜잭션의 신뢰성을 보장하기 위해 설계된 네 가지 핵심 특성을 의미한다.1. Atomicity (원자성)원자성은 트랜잭션의 모든 연산이 모두 성공적으로 완료되거나 전혀 완료되지 않도록 보장하는 특성이다.개념: 트랜잭션의 모든 작업은 하나의 단일 단위로 처리된다. 트랜잭션이 중간에 실패하면 모든 작업은 취소되고, 데이터베이스는 트랜잭션이 시작되기 전의 상태로 되돌아간다.예시: 은행에서 계좌 이체를 하는 경우, 돈이 한 계좌에서 인출되고 다른 계좌에 입금된다. 트랜잭션 도중 실패가 발생하면 인출과 입금 모두 이루어지지 않도록 보장한다.2. Consistency (일관성)일관성은 트랜잭션이 성공적으로 완료되면 데이터베이스가 일관된 상태를 유지하도록 보장하는 특성이다.개념..