Development

코틀린 - 함수형 프로그래밍에 대하여
현재 "객체에서 함수로" 라는 책을 바탕으로 함수형 프로그래밍 스터디를 진행하고 있습니다.처음 함수형 프로그래밍을 접하면서 느꼈던 함수형 프로그래밍만의 매력을 복기하며 정리하고자 합니다. 0. 함수란?📌 수학적 관점함수는 수학에서 유래한 개념으로, 특정 입력을 받아 출력으로 변환하는 규칙입니다. 수학적 함수는 입력과 출력 사이의 명확한 관계를 정의하며, 외부 환경에 의존하거나 영향을 주지 않습니다.입력과 출력: 동일한 입력은 항상 동일한 출력 반환 (→ 순수성 / 순수 함수)독립성: 외부 상태나 변수에 의존하지 않음투명성: 함수 호출은 그 결과값으로 대체 가능 (→ 참조 투명성)f(x, y) = x + y f(2, 3) = 5항상 입력값 x=2, y=3에 대해 동일하게 5를 반환합니다. 💻 프로그래..

JVM 밑바닥까지 파헤치기
JVM(Java Virtual Machine) 완벽 정리 🚀 1. JVM이란? JVM(Java Virtual Machine)은 자바 애플리케이션을 실행하기 위한 가상 머신입니다.개발자가 작성한 자바 코드는 바이트코드(Bytecode, .class 파일)로 변환된 후, JVM이 이를 실행합니다.JVM의 가장 큰 장점 중 하나는 운영체제(OS)에 종속되지 않는다는 것입니다.이는 자바의 “Write Once, Run Anywhere” 원칙을 가능하게 합니다. 💡 즉, 자바 프로그램이 어떤 운영체제에서든 실행될 수 있도록 해주는 역할을 합니다.2. JVM의 주요 기능 ① 바이트코드 실행 • 자바 컴파일러(javac)가 .java 파일을 .class 바이트코드 파일로 변환. • 클래스 로더에 의해 전달된 바이..

자바 컴파일 과정
자바(Java)의 컴파일 과정은 크게 4단계로 진행됩니다. 먼저 짚고 넘어가야할 것은, 자바는 JVM을 통해 OS에 독립적인 특징을 갖고 있다는 것입니다. 이는 즉 자바 코드가 컴파일되면 바로 CPU에서 읽히는 기계어로 변환되는 것이 아닌, 중간 역할을 하는 JVM을 거쳐야한다는 뜻이기도 합니다.1. 개발자의 자바 소스 코드 작성 (.java 파일)자바 프로그램은 .java 확장자를 가진 소스 코드 파일로 작성됩니다.흔히 우리가 작성하는 자바 코드를 의미합니다.public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }} 2. 자바 컴파일러(Java Co..
자바는 왜 객체지향 언어인가요?
자바는 캡슐화,상속,추상화,다형성의 특징을 갖고 있기 때문입니다. 흔히 말하는 "캡상추다" 가 맞습니다. 1. 캡슐화(Encapsulation)객체 내부의 데이터(속성)는 private으로 숨기고, getter/setter 메서드를 통해 접근할 수 있습니다.이를 통해 데이터 보호와 정보 은닉이 가능하며, 유지보수가 쉬워집니다.public class Person { private String name; // 외부에서 직접 접근 불가 public String getName() { // 캡슐화를 통해 접근 return name; } public void setName(String name) { this.name = name; }} 2. 상속(Inherit..

Boolean true == "true"가 가능할까요?
최근 제출을 목적으로 풀스택으로 웹 시스템을 개발했다. 그렇게 제출 2시간 전, 마지막 테스트를 하고 있던 와중, 어마어마한(?) 버그를 발견하게 되었다...... 바로 체크박스 check / uncheck가 ajax로 유지되지 않는다는 것...!원래는 잘 동작했던 기능이었기에, 도대체 뭐가 문제지 하고 식은땀이 주르르르르르르륵 났던 것 같다...결과적으론 버그를 찾아서 해결했지만,,정말 식겁한 순간이었던 것 같다...ㅠㅠㅠㅠㅠ 다시는 이런 문제를 일으키지 않기 위해 블로그에 가볍게 정리해보려고 한다. 1. 배경구현하고자한 내용을 간단히 설명하자면, 위 사진처럼 체크 박스 이벤트에 의해 DB에 체크여부를 저장하는 로직을 구현해야 했었다.체크를 클릭하면, DB에 is_checked 칼럼이 true, unc..
스프링 빈이란??
1. 스프링 빈? 정의(What?) IoC 컨테이너(스프링 컨테이너) 안에 들어있는 객체로, 필요 시 스프링 컨테이너에서 가져와서 사용한다. 싱글톤으로 저장되기 때문에 객체의 재사용이 가능하다. 왜써?(why?) 스프링 컨테이너에서 개발자 대신 객체를 관리하도록 하기 위함. 객체를 개발자가 직접 생성하고 관리하는 것이 아니라 스프링 컨테이너에 스프링 빈으로 등록하고 컨테이너가 연관관계를 맺고 관리하도록 할 수 있다. 스프링 빈을 등록하는 방법은 아래와 같다. 1. @Bean 어노테이션 + ComponentScan 어노테이션 @ComponentScan(basePackages= {"com.example.myapp"}) @ImportResource(value= {"classpath:application-con..
스프링 컨테이너 DI와 IoC
1. IoC (Inversion Of Control) 제어의 역전이란? 정의(What?) 프로그램의 메서드나 객체를 개발자가 직접 제어하는 것이 아니라 외부(스프링 컨테이너)에서 관리하도록 하는 것 왜 써?(Why?) 개발자는 비즈니스 로직 구현에만 집중할 수 있기 때문 또한 제어의 역전을 통해 SOLID 원칙 중 DIP(의존관계 역전 원칙)를 준수할 수 있다. SoccerPlayer라는 인터페이스가 있다고 가정해보자. 아래 코드는 DIP를 위반한 상태이다. DIP는 추상화에 의존해야하지 구체화에 의존하면 안된다는 원칙인데, 아래 코드에서 Coach 클래스는 현재 체력 훈련 세션 객체를 의존하고 있다. 다른 훈련세션으로 변경하기 위해선 코드를 직접 수정해야하기 때문이다. public class Coach..

객체지향 설계원칙 : SOLID 란?
SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙이다.각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)으로 이루어져 있다. SOLID를 지킨다면 프로그램이 복잡해져도 변경에 용이하고 유지보수와 확장이 쉬운 소프트웨어를 개발할 수 있을 것이다. 1. SRP(단일 책임 원칙, Single Responsibility Principle)정의(what?)하나의 클래스는 하나의 책임을 가져야한다는 뜻이다.클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하기 위해 집중되어야 한다.왜 써?(why?)책임의 영역이 확실해지기 때문에 어떤 클래스의 책임이 변경되어야한다해도 다른 클래스의 책임에는 영향을 미치..