🌳 < 절차지향 (Procedural Programming) >

절차 지향 프로그래밍은 말 그대로 일련의 절차와 순서에 따라 프로그래밍이 동작하도록 설계되는 방식이다. 이는 '상태'와 '행동'을 별개로 취급하며, 프로그램은 일련의 함수들이 순차적으로, 혹은 필요에 따라 호출되면서 진행된다.

각 함수는 특정 작업을 수행하며, 데이터는 주로 함수 간에 인자로 전달된다.

 

절차 지향 프로그램은 간단한 프로그램에서는 잘 동작할 수 있지만, 프로그램의 규모가 커지고 복잡성이 증강할수록 절차 지향 프로그래밍의 한계가 드러나게 된다. 왜냐하면, 더 큰 프로그램에서는 Data와 그 Data를 조작하게 되는 함수들이 산재하게 되고, 이로 인해 코드의 유지보수가 어려워지게 된다. 

 

🌳 < 객체 지향 프로그래밍 (Object-Oriented Programming) >

객체 지향 프로그래밍은 프로그램을 일련의 독립적인 '객체'들의 집합으로 보는 프로그래밍 패러다임이다.

각각의 객체는 특정한 '상태'(데이터,속성,필드 등)와 '행동'(메서드)를 갖는다. 

 

 

< 표로 보는  절차지향과 객체지향 > 

절차지향형 프로그램은 말 그대로 이야기를 순서대로 써 나가듯이 프로그램을 구성하는 방식이다.

물론 절차 4 처럼 제어문을 사용해 실행 순서를 바꿀 수는 있지만, 그것 조차도 제어문의 절차로 진행되는 것이다.

 

반면 객체지향형 프로그램은 이 프로그램에서 사용되는 객체(자동차,엔진,운전자)를 생성하고,각 객체에 포함된 데이터(컬러,엔진,이름,면허번호,종류)와 기능(구동하기,전진하기,운전하기,장애물 감지하기)을 상호 호출함으로써 프로그램을 구성하는 방식을 말한다.

 

이 때 각 객체에 포함된 데이터는 '속성' 또는 '필드','인스턴스 변수' 라 하고, 기능은 '메서드' 라고 한다.


결국, 절차 지향 프로그래밍은 프로그램의 실행 순서와 구조에 집중하는 반면, 객체 지향 프로그래밍은 프로그램을 구성하는 개별 객체들과 그들 간의 상호작용에 집중한다. 

 

 

 

Reference : Do it! 자바 완전 정복

http://www.yes24.com/Product/Goods/103389317

 

Do it! 자바 완전 정복 - YES24

이 책은 ‘이제 막 프로그래밍에 입문한 사람’에게 꼭 필요한 기본기부터 ‘찐개발자’라면 꼭 알아야 할 내용까지 국내 집필서 중 가장 많은 도해와 그림을 이용해 설명한다. 특히 프로그래

www.yes24.com

 

🤔 < Class와 객체의 개념 >

자바는 객체지향형 프로그래밍 언어로, 클래스,추상 클래스,인터페이스와 같은 객체지향적

문법 요소를 사용해 프로그램을 구성한다.

 

자바를 제대로 사용하려면 이러한 문법 요소를 이해 하여야 한다.

먼저 기본 문법 요소인 클래스에 관해 알아보자.

< 클래스의 개념 알아보기 >

 

객체는 사용할 수 있는 실체를 의미하며,클래스는 객체를 만들기 위한 설계도와 같다. 따라서 1개의 정의된 클래스를 사용하여, 여러 개의 객체를 만들 수 있다.

 < 클래스는 왜 사용할까? >

 

자바가 기본 문법 요소로써 클래스를 사용하는 이유는 무엇일까? 이를 이해하기 위해 먼저 프로그램 문법 요소의 발전 과정을 살펴 보면서 클래스가 만들어진 배경을 알아보자.

변수 : 변수는 가장 기본적인 데이터 저장 단위이다. 간단하게 말하자면, 변수는 데이터를 저장하는 상자라고 생각할 수 있다. 각각의 변수는 특정 형태의 데이터를 저장하며, 이를 필요에 따라 불러오거나 변경할 수 있다.

 

배열: 여러 개의 동일한 형태의 데이터를 효율적으로 관리하기 위해 사용된다. 예를 들어, 학생들의 점수를 관리하고 싶다면 각 학생의 점수를 저장할 변수를 따로 만들어야 하는데, 이는 매우 번거로울 수가 있다. 배열을 사용하면 이런 번거로움을 줄이고, 같은 형태의 데이터를 하나의 변수로 묶어 관리할 수 있다. 

 

구조체: 서로 다른 형태의 데이터를 묶어 관리할 수 있는 문법 요소이다. 배열이 동일한 형태의 데이터만 묶을 수 있는 반면, 구조체는 다양한 형태의 데이터를 한꺼번에 묶을 수가 있다. 예를 들어, 학생의 이름(문자열),나이(정수), 그리고 성적(실수)등을 하나의 구조체로 묶어 관리할 수 있다.

 

클래스: 구조체와 비슷하게 다양한 형태의 데이터를 묶을 수 있지만, 그 이상의 기능을 가지고 있다. 클래스는 관련된 Data뿐만 아니라, 그 Data를 처리하는 Method 까지 묶어 관리가 가능하다. 이는 코드의 재사용성을 높이며, 복잡성을 줄이는데 큰 도움이 된다. 예를 들어, 학생 클래스는 이름,나이,성적과 같은 데이터와 함께,성적을 계산하거나 출력하는 기능을 가질 수 있다.

 

Reference : Do it! 자바 완전 정복

http://www.yes24.com/Product/Goods/103389317

 

Do it! 자바 완전 정복 - YES24

이 책은 ‘이제 막 프로그래밍에 입문한 사람’에게 꼭 필요한 기본기부터 ‘찐개발자’라면 꼭 알아야 할 내용까지 국내 집필서 중 가장 많은 도해와 그림을 이용해 설명한다. 특히 프로그래

www.yes24.com

 

💻 < 프로그래밍 언어 >

프로그래밍 언어는 컴퓨터가 이해할 수 있는 명령을 작성하기 위한 도구를 말한다.

 

컴퓨너는 0과 1만 이해할 수 있고, 사람의 말은 이해할 수 없다. 따라서 JAVA,C,C++과 같은 프로그래밍 언어를 사용해야 한다. 이런 프로그래밍 언어들은 기계어로 바뀌어 컴퓨터에 전달된다.


프래그래밍 언어는 크게 고급언어, 어셈블리어,기계어로 나뉜다.

 

📟 < 고급 언어 >

고급 언어는 인간이 이해하기 쉬운 문장을 사용해, 컴퓨터가 수행해야 할 작업을 정의한 언어로,

C,C++,JAVA 등이 있다.

📟 < 어셈블리어 >

고급 언어와 기계어 사이에는 어셈블리어가 있다. 어셈블리어는 기계어와 1 대 1로 대응되는 언어로, 굳이 따지 자면 기계어와 좀 가깝다고 할 수 있다.

📟 < 기계어 >

기계어는 2진 데이터(0010100100111...)로 구성돼 있어 컴퓨터가 직접 알아들을 수 있는 언어를 말한다.

 

즉, 람이 이해할 수 있는 언어를 구사하는 것이 '고급 언어',

이를 컴퓨터가 이해할 수 있는 언어로 번역한 것이 '기계어'인 셈이다. 따라서 고급 언어를 사용해 컴퓨터에게 명령을 전달 하려면 반드시 '번역'이라는 과정을 거쳐야 한다. 그림 1-1을 살펴보자.

고급언어로 사람이 코드를 작성해서, 컴파일러(번역) 하면 기계어로 컴퓨터가 해석..

 

C 언어와 같은 프로그램을 배운 경험이 있다면 위 이야기는 익숙할 수 있다.

 

하지만 잠시 기계어가 무엇인지 생각해 보자.. 기계어는 '컴퓨터가 이해할 수 있는 언어'라고 했다. 여기서 반드시 짚고 넘어가야 할 점은 '모든 컴퓨터는 똑같은 기계어를 사용할까?'라는 것 이다.

 

답은 당연히 '다르다'이다. 인간이 사는 지역마다 서로 다른 언어를 사용하듯이 컴퓨터도 자신의 플랫폼에 따라 서로 다른 언어를 사용한다. 예를 들어 Window 컴퓨터와 MAC 컴퓨터는 서로 다른 기계어를 사용한다.

 

따라서 동일한 고급 언어로 작성된 프로그램이라 하더라도 다른 플랫폼상에서 동작하도록 하기 위해서는 다른 컴파일러를 사용해야 한다. 

 

 

출처 : Do it! 자바 완전 정복 

http://www.yes24.com/Product/Goods/103389317

 

Do it! 자바 완전 정복 - YES24

이 책은 ‘이제 막 프로그래밍에 입문한 사람’에게 꼭 필요한 기본기부터 ‘찐개발자’라면 꼭 알아야 할 내용까지 국내 집필서 중 가장 많은 도해와 그림을 이용해 설명한다. 특히 프로그래

www.yes24.com

 

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

💾 < Module  > 

Module은 Program에서 수행하는 기능을 모아 놓은 것을 의미한다. 수학 계산,데이터베이스 처리,사용자 인터페이스 구성 등이 Module의 좋은 예시이다. 이들 각각의 기능은 별도의 Module로 구성될 수 있다. 또한, 하나의 Module은 여러 개의 Component로 구성될 수 있다.

 

💾 < Component > 

"Program에서 기능을 수행하는 단위"를 의미한다. 예를 들어, 프로그램이 계산하는 기능을 가지고 있다면, 계산 기능은 계산 컴포넌트라 부를 수 있다.

 

이러한 Component는 다른 Component에 의존할 수 있으며, 또는 다른 Component에 의존성을 제공할 수 있다.

이러한 의존성 관계를 정의하고 관리하는 방법 중 하나가 DI(Dependency Injection)인 것이다.

 

Reference 1) : Wikipedia: Modular Programming

 

Modular programming - Wikipedia

From Wikipedia, the free encyclopedia Software design technique Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything neces

en.wikipedia.org

Reference 2) : Wikipedia: Software Component

 

 

Component-based software engineering - Wikipedia

From Wikipedia, the free encyclopedia Branch of software engineering An example of two components expressed in UML 2.0. The checkout component, responsible for facilitating the customer's order, requires the card processing component to charge the customer

en.wikipedia.org

 

🤔 < Dependency Injection ? >

Object간의 관계를 정의하며, 관계에 의해 필요한 객체를 제공하는 것.

예를 들어, Service Class가 Repository Class를 사용할 때, Service Class는 Repository Class에 대한 의존성이 생긴다.

이런 의존성을 줄이는 방법 중 하나가 바로 "Dependency Injection" 이다.

 

🔥 < Dependency Injection Code in Java >

public class Service {
private final Repository repository;

public Service(Repository repository) {
this.repository = repository;
}

public void doSomething() {
 repository.performAction();
 }
}

위의 Code에서 Service Class는 Repository Class의 performAction() method를 사용한다. 이 method는 Repository Class에서 구현된다.

public class Repository{
  public void performAction() {
    //..
  }
}

이제 Service Object를 생성할 때, Repository 객체를 생성자에게 전달해주면 된다.

Repository repository = new Repository();
Service service = new Service(repository);
service.doSomething();

이렇게 하면, Service Class는 Repository Class의 기능을 사용할 수 있다. 이것이 바로 Dependency Injection의 개념이다.

 

🤔< Dependency Injection의 장점 ? > 

DI를 사용하면 코드의 재사용성,테스트 편의성,유연성이 향상된다. 특히 클래스 간의 의존성을 줄이므로 테스트와 리팩토링이 수월해진다.

 

 

Reference : Martin Fowler의 Dependency Injection

Wikipedia: Dependency Injection

 

Inversion of Control Containers and the Dependency Injection pattern

Explaining the Dependency Injection pattern, by contrasting it with Service Locator. The choice between them is less important than the principle of separating configuration from use.

martinfowler.com

 

Dependency injection - Wikipedia

From Wikipedia, the free encyclopedia Software programming technique Dependency injection is often used alongside specialized frameworks, known as 'containers', to facilitate program composition. In software engineering, dependency injection is a design pa

en.wikipedia.org

 

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

개발자는 종종 "Library"와 "Framework"라는 용어를 같은 의미로 사용한다. 그러나 차이가 있다.

🚀 < Library ? >

Library는 개발자가 이미 작성해놓은 코드 조각들로, 필요한 기능을 가져다 사용할 수 있게 도와준다.

예를 들어 Library는 IKEA에 가는 것과 같다. 이미 집이 있지만, 가구에 대한 약간의 도움이 필요해서. 다양한 물건을 고르고 선택할 수 있다.즉 내가 제어할 수 있다. 주로 Java의 'java.time' Package, React, jQuery가 있다. 

 

🚀 < FrameWork ? >

FrameWork는 Application의 기본적 구조를 제공한다. 마치 건물의 철골 구조를 세우는 것처럼. 이처럼 FrameWork는 개발의 방향을 정해주지만, 사용하기 위해서는 규칙을 따라야 한다. 예를 들면, Spring이나 Django와 같은 BackEnd FrameWork 혹은 Vue나 AngularJs 같은 FrontEnd FrameWork가 있다.

 

 

 

Reference : https://www.freecodecamp.org/news/the-difference-between-a-framework-and-a-library-bd133054023f/

 

The Difference Between a Framework and a Library

Developers often use the terms “library” and “framework” interchangeably. But there is a difference. Both frameworks and libraries are code written by someone else that is used to help solve common problems. For example, let’s say you have a prog

www.freecodecamp.org

 

'Developer 지식' 카테고리의 다른 글

Class와 객체의 개념(변수,배열,구조체,클래스)  (0) 2023.04.03
Difference that Module and Component  (0) 2023.04.03
Business logic  (0) 2023.04.02
Domain  (0) 2023.04.02
Sample code in object and Instance.  (0) 2023.04.02

JAVA IllegalStateExecption

IllegalStateException은 잘못된 상태에서 코드가 실행될 때 발생하는 예외

public class Main {
   public static void main(String[] args) {
      List list = new ArrayList<>();
      list.add("Hello");
      list.add("World");
      list.clear();
      if (!list.isEmpty()) {
         list.get(0); // throws IllegalStateException
      }
   }
}

위 예시 코드에서 list.clear() 메서드를 호출하여 list가 비워짐.그 후, list.isEmpty() 메서드를 호출하여 비어있는지 확인하고, 비어있지 않을 경우 (if (!list.isEmpty())) list.get(0) 메서드를 호출.하지만, list가 비어있기 때문에 list.get(0) 메서드 호출 시 IllegalStateException이 발생.



1.Iterator에서 next() 메서드 호출 전에 remove() 메서드가 호출된 경우

2.ArrayList에서 add() 메서드 호출 후, size() 메서드와 같은 메서드로 크기 제한이 초과된 경우

3.이미 닫힌 데이터베이스 연결을 사용하려고 시도한 경우

4.이미 닫힌 파일에 쓰려고 시도한 경우

5.이미 종료된 스레드에서 실행을 시도한 경우

6.이미 닫힌 소켓에서 데이터 전송을 시도한 경우

7.이미 실행된 메서드를 다시 실행하려고 시도한 경우

8.스레드 풀에서 이미 실행된 작업을 다시 실행하려고 시도한 경우

9.이미 닫힌 세션에서 데이터 전송을 시도한 경우

10.이미 닫힌 스트림에서 데이터 쓰기를 시도한 경우에서 발생 한다.

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
java UncheckedException nullpointerexception  (0) 2023.04.03

java UncheckedException nullpointerexception

1.NullPointerException (NPE):

NullPointerException은 Java에서 객체가 존재하지 않음을 나타내는 오류.

객체를 사용하려고 했을 때 발생하며, 객체를 먼저 생성하거나 null 값을 확인하지 않아 발생.

String name = null; // name 변수에 null 값을 할당

System.out.println(name.length()); // name 변수의 길이를 출력하려 하지만 name이 null이므로 NullPointerException이 발생.

String str = null;
System.out.println(str.length());

2.ArrayIndexOutOfBoundsException:

ArrayIndexOutOfBoundsException은 배열의 범위를 벗어난 인덱스에 액세스하려고 할 때 발생한다. 배열의 인덱스는 0부터 시작하므로, 인덱스는 0에서 배열 크기의 -1 사이의 값이어야 한다. 이 예외를 피하기 위해 배열 인덱스의 유효성을 확인하고, 반복문에서 범위를 벗어나지 않도록 주의해야 한다.

int[] numbers = new int[5];
numbers[5] = 10; // ArrayIndexOutOfBoundsException 발생

3.ArithmeticException:

ArithmeticException은 산술 연산에서 잘못된 연산이 발생할 때 발생하는 예외이다. 가장 일반적인 경우는 0으로 나누려고 할 때 발생한다. 이 예외를 피하기 위해 연산 전에 분모가 0이 아닌지 확인하거나, 예외 처리를 사용하여 적절한 처리를 수행해야 한다.

int x = 10;
int y = 0;
int result = x / y; // ArithmeticException 발생 (0으로 나누기)

이러한 Unchecked Exceptions를 처리하려면 프로그램 로직을 주의 깊게 검토하고, 예외가 발생할 수 있는 상황을 파악하여 적절한 방어 코드를 작성해야 한다. 필요한 경우 try-catch 블록을 사용하여 예외를 처리하고, 프로그램이 예외 발생 시 적절한 동작을 수행할 수 있도록 해야 한다.

'Java' 카테고리의 다른 글

GUI(Graphical User Interface)  (0) 2023.04.04
Exception Handling  (0) 2023.04.04
프로그래밍 언어와 자바  (0) 2023.04.03
DI(Dependency Injection) Explanation and Code  (0) 2023.04.03
JAVA IllegalStateExecption  (0) 2023.04.03

비즈니스 로직이란 특정 비즈니스 분야에서 수행되는 사업 활동에 관한 규칙과 프로세스를 의미한다. 즉, 애플리케이션에서 구현되어야 할 기능들을 말하는 것이다.

예를 들어, 인터넷 쇼핑몰 애플리케이션에서는 상품 검색, 장바구니에 담기, 주문, 결제, 배송 등의 비즈니스 로직이 존재한다. 이러한 비즈니스 로직들은 애플리케이션의 핵심 기능을 구성하며, 제대로 구현되어야 애플리케이션이 원하는 대로 작동할 수 있다.

비즈니스 로직의 정확한 이해와 구현은 애플리케이션의 전반적인 품질과 성공에 결정적인 영향을 미친다. 앞으로의 프로젝트에서도 비즈니스 로직을 철저히 분석하고, 이를 바탕으로 견고한 애플리케이션을 만들어보려 한다.

'Developer 지식' 카테고리의 다른 글

Difference that Module and Component  (0) 2023.04.03
Library와 Framework의 차이점  (0) 2023.04.03
Domain  (0) 2023.04.02
Sample code in object and Instance.  (0) 2023.04.02
객체(Object)  (0) 2023.04.02

도메인이란, 특정 분야에 관한 비즈니스 로직과 규칙을 담은 개념이다. 도메인은 애플리케이션의 비즈니스 로직을 구현하는 데 사용되며, 소프트웨어 개발 프로세스에서는 도메인 모델링을 통해 도메인을 정의한다.

예를 들어, 인터넷 쇼핑몰 프로젝트에서는 상품, 주문, 결제, 배송 등이 도메인이 될 수 있다. 이러한 도메인을 정확하게 이해하고 설계하는 것은 애플리케이션의 전반적인 품질과 성공 여부에 결정적인 영향을 미친다.

도메인 모델링을 통해 비즈니스 요구사항을 소프트웨어 설계에 반영할 수 있으며, 이를 바탕으로 개발자들은 애플리케이션의 핵심 기능을 구현할 수 있다. 이 과정에서 도메인 전문가와 개발자 간의 원활한 소통이 중요하다.

앞으로의 프로젝트에서도 도메인에 대한 이해를 바탕으로 더욱 견고한 애플리케이션을 구축해보고 싶다. 

'Developer 지식' 카테고리의 다른 글

Library와 Framework의 차이점  (0) 2023.04.03
Business logic  (0) 2023.04.02
Sample code in object and Instance.  (0) 2023.04.02
객체(Object)  (0) 2023.04.02
JAVA TDD  (0) 2023.04.02

+ Recent posts