본문 바로가기

Back-end/Java 개념8

지극히 개인적인 OOP에 대한 원초적인 접근과 해석 0. 개요 요즘 스터디에서 토비의 스프링을 읽고 있습니다. 책을 읽다보니 내가 그동안 짜던 코드는 OOP적인 코드가 아니라는 것을 깨달았습니다. 머리로는 "이해하고 있다"라는 착각을 하고 있던 것이죠. 그래서 근본적인 질문과 관점으로 다시한번 OOP에 대해 배워보려고 합니다. 1. OOP란 무엇인가? OOP는 객체지향 프로그래밍(Object Oriented Programming)의 약자입니다. 그렇다면 이 객체 지향이라는 것이 무엇일까 궁금증이 생깁니다. 객체지향이라는 것은 한 묶음의 소스코드를 객체라는 하나의 단위로 보는 것입니다. 그리고 이 객체 간의 상호작용을 통해서 하나의 프로그램이 돌아가게 되는 것이죠. 마치 전대물에 나오는... 수십가지 서로 다른 로보트가 합체해서 새로운 로보트가 되는 것과 .. 2023. 8. 6.
AOP(Aspect Oriented Programming) 개념과 구현 0. 개요 - 토비의 스프링 6장을 읽다보면 AOP에 대한 이야기가 나온다. - 해당 부분에서 Proxy가 왜 등장하는지, AOP와 proxy가 무슨 관계가 있는지 등 이해할 수 없는 부분이 너무 많았다. - 즉, 내가 AOP에 대해 모르고 있기에 이해할 수 없다는 것을 깨닫고 AOP에 대해서 정리해보기로 했다. - 나와 같이 AOP 기본개념에 대해 모르는 분들에게 도움이 되기를 바란다. 1. AOP와 Proxy의 상관관계 - AOP 이야기를 할때면 프록시 이야기가 빠지지 않고 나온다. - 왜 그럴까? AOP와 프록시가 무슨 관계가 있는 것일까? 아니 그보다 프록시란 정확하게 무엇인가? - 이에 대해서 이해해보자. a) Proxy가 뭔데? - 프록시는 어떤 역할을 대신 수행하는 대상을 가리킨다. - 네트.. 2023. 7. 24.
자바에서 람다를 사용하는 방법 0. 개요 - 자바에서 람다를 잘 써보고 싶은 마음에 본 포스팅을 준비했습니다. - 우선 람다를 이해하기 위해서는 기본적인 인터페이스에 대한 이해도가 필요합니다. - 인터페이스를 시작으로 람다에 대해 배워봅시다! 1. 인터페이스를 매개변수로 받는 메서드 - 인터페이스를 매개변수로 받으면 어떻게 될까? - 한번도 의식적으로 사용해 본 적도, 생각해 본 적도, 고민해 본 적도 없는 질문이다. - 다음 코드를 보자. 예시코드 public static void main(String[] args) { static void sound(PrintThing printThing) { printThing.print(); } } public interface PrintThing { void print(); } - 위의 코드.. 2023. 6. 26.
Optional이 뭔데? 왜 쓰는데? 1) Optional을 쓰는 이유 - 어떤 객체를 조회하여 객체 내부의 값을 가져오려고 할때 해당 값이 존재하지 않는다면 NullPointerException이 발생하는 것을 자주 마주칠 것이다. 아래의 코드처럼 말이다. 예시코드(문제 제기) public class OptionalExample{ public static void main(String[] args) { Friend myFriend = findByName("Kim"); System.out.println(myFriend.getAge()); } private static Friend findByName(String name){ Friend friend = friendRepository.findByName(name); return friend; .. 2023. 6. 23.
Unreachable Statement 오류 0. 개요 - 자바를 사용하다 보면 발생하는 오류 중 하나인 Unreachable Statement에 대해서 알아보자. 1. Unreachable Statement a) 오류의 의미 - Unreachable Statement를 해석해보면, 이는 접근할 수 없는 문장이라는 뜻이다. - 접근할 수 없다는 것이 무슨 의미일까? - 말 그대로 해당 코드를 실행하지 못한다는 뜻이다. b) 오류 메시지 - Unreachable Statement 오류가 발생하면 다음과 같은 오류 메시지가 발생한다. - 해당 메시지를 보면, 어떤 코드에서 Unreachable Statement가 발생했는지 확인할 수 있다. - 이 메시지의 의미는 해당 코드를 실행할 수 없다는 것이다. - 즉, 해당 코드를 포함한 다음 코드들이 아예 .. 2022. 5. 10.
Collections와 Collection에 대하여 0. 개요 - Java를 공부하다 보면 Collections와 Collection을 반드시 만나게 된다. - 이 둘은 독립된 존재이면서 동시에 떨어질 수 없는 관계를 가지는데, 직접 파보기 전까지 이해하기가 힘들다. - 이번 포스팅에서는 Collections와 Collection의 차이점과 관계에 대해서 알아보자. 1. Collection이란? - Collection은 자료구조를 다루기 위한 기본 메서드와 반복자를 제공하는 인터페이스다. a) Collection은 Interface다. - 다음 사진은 Java 8 공식 문서의 collection에 대한 설명이다. - Collection은 Iterable을 상속받은 인터페이스다. - 보통 인터페이스는 공통된 메서드를 상속하기 위한 목적으로 작성된다. - 그.. 2022. 5. 9.
Java의 기본 자료형(Primitive) 1. 정수형(short, int, long) a) Java가 숫자 계산을 하는 방법 - Java는 숫자 연산을 int형으로 변환하여 계산한다. 즉, int형 연산을 기본으로 한다. - short 자료형의 변수 2개를 더한다고 하더라도 연산 시 int로 변환하여 계산하고, int형으로 결과를 반환한다. public class MyClass { public static void main(String args[]) { short num1 = 10; short num2 = 10; short num3 = num1 + num2; System.out.print(num3); } } - 이처럼 short 자료형이지만, Java가 연산을 할 때에는 int로 계산이 되기 때문에 위와 같은 에러가 발생한다. - 즉, 작은 자.. 2022. 1. 28.
변수와 리터럴에 대하여 1. 변수(Variable) a) 개념 정의 - 변수는 데이터를 저장하기 위해 할당된 메모리 공간에 붙여지는 이름이다. - 다음 예시를 보자. int num = 1; - 변수를 선언하여 1이라는 숫자는 메모리의 어떤 공간에 저장되었다. - 이 메모리 공간은 16진 수로 된 일련번호를 갖는다. ex) 1b3A1211 - 저장된 데이터(1)를 찾기 위해서 매번 16진수의 메모리 주소 값을 기억하는 것은 무리가 있으며, 가독성이 떨어져 비효율적이다. - 그러므로 이 메모리 공간에 대한 주소값을 대신한 이름을 붙이는데, 이것이 변수다. b) 변수 정의 시 주의사항 - 변수의 이름은 숫자로 시작할 수 없다. - 변수의 이름에는 $와 _(언더바) 외 다른 특수문자는 사용할 수 없다. - 이미 Java에 정의되어 있.. 2022. 1. 27.