본문 바로가기

전체 글

(126)
[java(자바)] Call by Value와 Call by Reference의 차이 _디버깅의 눈물 Call by Value와 Call by Reference는 메서드를 호출할 때 파라미터를 전달하는 2가지 방식을 말합니다. Call by Value(값에 의한 호출) -메서드를 호출할 때 '값'을 전달하는 방식입니다. -메서드에 파라미터로 전달되는 값을 변경하더라도, 원본 값은 변경되지 않습니다. -자바의 메모리는 크게 스택(Stack)과 힙(Heap)으로 나뉘는데, 메서드 호출 시에는 스택 영역에 메서드의 지역 변수와 인자 등이 저장됩니다. 이때 인자로 전달되는 값은 기존 인자의 값을 복사한 새로운 인자 값이 스택에 저장된 것입니다. 이 값은 메서드 내에서 지역적으로 사용됩니다. 메서드가 종료되면 해당 메모리 영역이 스택에서 제거되고, 호출자의 변수에는 아무런 영향이 없습니다. -Call by Val..
[java(자바)] String, StringBuilder, StringBuffer의 차이 _디버깅의 눈물 String -한번 생성한 String 객체의 내용은 변경할 수 없는 불변(Immutable)한 클래스입니다. -불변하기 때문에 멀티 스레드 환경에서 동기화 문제를 신경 쓸 필요가 없고, 조회 연산이 빠릅니다. -새로운 문자열을 만들 때마다 새로운 String 객체를 생성해야 합니다. -String은 조회 연산이 빠르지만, 문자열을 변경하는 경우 매우 비효율적이며 메모리 소비가 많아집니다. StringBuilder -문자열을 변경할 수 있는 Mutable(가변)한 클래스입니다. -문자열을 변경하는 동안 내부 버퍼(char 배열)를 사용하므로, 문자열 수정 시 새로운 객체를 생성하지 않습니다. -문자열을 변경하는 경우 String 대신 StringBuilder를 사용하면 성능상 이점이 있습니다. -Stri..
[java(자바)] Wrapper Class란? _디버깅의 눈물 Wrapper Class 자바에서 Wrapper Class는 기본 데이터 타입(Primitive Type) 자료형을 객체로 다룰 수 있도록 하는 클래스입니다. 즉, 기본 데이터 타입의 값을 객체로 감싸는 역할을 합니다. Boolean, Byte, Character, Short, Integer, Long, Float, Double이 있습니다. Wrapper Class 사용 이유 // Integer Wrapper class의 메서드/상수 기능 제공 예시 Integer num1 = 42; System.out.println(Integer.MAX_VALUE); // 2147483647 System.out.println(Integer.MIN_VALUE); // -2147483648 System.out.println..
[java(자바)] 자바의 데이터 타입-기본형(Primitive Type) vs 참조형(Reference Type) _디버깅의 눈물 기본형(Primitive Type) -메모리에 데이터를 저장할 때 해당 값을 직접 저장하는 타입입니다. -값 자체를 저장하기 때문에 메모리 사용이 적고 연산이 빠릅니다. -비객체 타입이기 때문에 null을 가질 수 없습니다. 만약 null 값을 넣고 싶다면, *Wrapper Class를 활용해야 합니다. -스택(stack) 메모리에 저장됩니다. -1)정수 타입(byte, short, int, long), 2)실수 타입(float, double), 3)문자 타입(char), 4)논리 타입(boolean) 총 8개가 존재합니다. -기본형 데이터 타입 이외의 모든 데이터 타입은 참조타입입니다. 참조형(Reference Type) -객체를 참조하는 레퍼런스(reference)를 저장하는 데이터 타입입니다. -객..
[java(자바)] 객체 지향 프로그래밍 vs 절차 지향 프로그래밍 _디버깅의 눈물 프로그래밍 이름 절차 지향 프로그래밍 객체 지향 프로그래밍 프로그래밍 방식 -일련의 명령문들을 단계적으로 실행하는 방식 -데이터와 함수가 분리 -데이터를 전달하면 함수에서 처리한 후, 결과를 반환 -객체를 중심으로 프로그래밍을 하는 방식 -프로그램을 여러 개의 객체로 분할 -객체 간의 상호작용을 바탕으로 프로그램을 개발 장점 1)컴퓨터 연산 방식과 비슷해 연산 속도가 빠름 2)간단한 구조로 소규모 프로그램에 효율 1)코드의 재사용성과 유지보수성이 좋음 2)코드의 가독성이 좋음 3)대규모 프로그램에 용이 단점 1)대규모 프로그램에서는 함수가 많아지기 때문에 코드 가독성이 좋지 않음 2)함수들 간 의존성이 높아 유지보수가 힘듦 1)초기 프로젝트 설계가 어려움 2)절차 지향 프로그래밍에 비해 연산 속도가 느림
[java(자바)] 객체 지향 프로그래밍 SOLID 원칙 _디버깅의 눈물 1. 단일 책임 원칙(Single Responsibility Principle) 하나의 클래스는 하나의 책임만 가져야 한다는 원리입니다. 즉, 클래스는 오직 한 가지 기능만 수행하도록 해야 합니다. 예를 들어, 주문(Order) 클래스가 주문 생성, 결제, 배송 등 여러 기능을 수행한다면 이는 SRP 원칙을 위배하는 것입니다. 이 경우 주문 생성, 결제, 배송 등 각각의 책임을 갖는 클래스를 만들어야 합니다. 이를 통해 클래스의 응집도를 높이고, 클래스 간 결합도를 낮춰 유연성과 확장성을 높일 수 있습니다. 2. 개방-폐쇄 원칙(Open-closed Principle) 클래스나 모듈은 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다는 원리입니다. 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 ..
[java(자바)] 자바에서 다중 상속을 허용하지 않는 이유 _디버깅의 눈물 자바에서 다중 상속을 허용하지 않는 이유는 다이아몬드 문제라고 불리는 모호성을 피하기 위해서입니다. 다중 상속이란 하나의 클래스가 두 개 이상의 부모 클래스로부터 상속을 받는 것을 말합니다. 예를 들어, Father와 Mother라는 클래스가 Person이라는 클래스를 상속받고, Child라는 클래스가 Father와 Mother를 상속받는다고 가정해봅시다. 이때 Child 클래스는 Person 클래스의 메서드나 필드를 어떤 부모로부터 참조해야 할지 알 수 없습니다. 이러한 모호성을 해결하기 위해 자바에서는 인터페이스라는 개념을 도입했습니다.
[java(자바)] 상속(extends) vs 구현(implements) _디버깅의 눈물 상속(extends) -이미 존재하는 클래스의 특성(필드와 메서드)을 자식 클래스가 물려받아 재사용하거나, 그 기능을 확장하기 위해 사용합니다. -상속은 코드의 중복을 줄이고, 유지보수성을 높게 합니다. -자바에서는 *다중 상속을 허용하지 않습니다. 구현(implements) -인터페이스를 구현하는 것을 의미합니다. 인터페이스는 클래스가 구현해야 하는 메서드를 정의하기 위해 사용합니다. -인터페이스를 구현한 클래스는 인터페이스에서 선언한 모든 메서드를 반드시 구현해야 합니다. -인터페이스를 구현한 클래스에서는 인터페이스에서 정의된 메서드만 사용할 수 있습니다. -인터페이스는 다중 상속을 허용합니다.