JAVA関連のことを調べてみた2023年08月09日

JAVA関連のことを調べてみた2023年08月09日

スッキリわかるJava入門 第3版を読んでみて-part7-

# はじめに
こんにちは(・ω・)ノ
今回はオブジェクト指向について学びました!
## 第7章 オブジェクト指向をはじめよう
### 1.オブジェクト指向を学ぶ理由
 ソースコードが長く複雑になりすぎて、開発者自身が内容を把握できなくなる
 ⇨人間自身がプログラム開発のボトルネックとなる
※ __ボトルネック__ …業務の停滞や生産性の低下を招いている工程・箇所

__オブジェクト指向プログラミング__
 大規模なプログラムもラクに開発できる

:sparkles:オブジェクト指向の目的
 「人間が把握しきれない複雑さ」を克服するため

:sparkles:学習意識の切り替え
 基本文法とオブジェクト指向とでは、そもそもの学び方もまったく違う

 ___オブジェクト指向の学習においては、
  概念を理解することやイメージすることをより重要視する必要がある___

オブジェクト指向という考え方を学ぶ
 ⇨ぼんやりとした理解でいい、繰り返し、少しずつ理解を深める

### 2.オブジェクト指向の定義と効果
 オブジェクト指向とは何か…?

:sparkles:オブジェクト指向の定義

元記事を表示

JavaでDIを理解したい

# 概要
JavaにおけるDIについて完全に理解できたので、備忘録的な役割として記事にしました。
ChatGPTさんのお力を存分に使っているので、日本語が硬い部分があるとおもいますが、気にしないでください。

## 依存性注入とは
依存性注入(Dependency Injection、以下DI)は、オブジェクト指向プログラミングにおける設計パターンの一つで、特にJavaなどの言語でよく使用されます。DIの役割やメリット、デメリットについて簡潔に説明します。

### 役割
DIの主な役割は、クラス間の依存関係を管理することです。クラスが他のクラスやコンポーネントに依存している場合、DIを使用すると、依存するオブジェクトを外部から注入できます。

### メリット
1. **可読性と保守性の向上**: コード間のクリーンな関係が保たれるため、各クラスの役割と責任が明確になります。
2. **再利用性の向上**: クラスが特定の実装に密結合されることなく、異なる実装を容易に交換できます。
3. **テスト容易性**: テスト時に本番の依存オブジェクトをモックやスタブに置き換えることが容易に

元記事を表示

【初投稿】物理削除と論理削除について

# 初めに

私、約1年ほど前に本格的にプログラミングをやり始めた身でございます。
技術記事もこれが初めてでどのように書いた良いのか、模索中でございます。
拙い文章になってしまうかもしれませんが、何卒よろしくお願い申し上げます。

# 私の紹介
名前:ヨシキックス
年齢:20代
生息地:関西地方

現在、エンジニアを目指して、日々勉強中でございます。
前置きはここまでにして、本題に入りたいと思います。

## 経緯

現在、とある学習サイトにてJavaのSpring Boot というフレームワークを使って学習しております。その中で、データベース(以下、DBと略す)の物理削除と論理削除のやり方・考え方について備忘録または誰かの問題解決のヒントとして残せたらと思い、当記事を投稿しました。

### 物理削除

DBにおいてDELETE文などを実行し、データまたはレコードを直接消してしまう方法。

例) EMPLOYEESテーブル(社員テーブル)

### Before

|ID | NAME|AGE|DEPARTMENT| POST|
| — | — |

元記事を表示

【Java】パラメタから実装クラスを選択する方法の検討

# やりたいこと
次のような実装がしたい場面がありました。以下は簡単なクラスを例に挙げます。
– IAnimalServiceインターフェイスがあり、これはbark()メソッドを持つ
– 実装クラスとしてDogServiceとLionServiceがある
– 任意のクラスに実装したprocess()メソッドは引数に適当な型を持つanimalTypeが与えられる
– 例えばString animalTypeとし、animalType=”lion”ならばLionServiceのbark()を呼ぶ
– **if分岐やcase文といった条件分岐で実装クラス選択はしたくない**

いわゆるストラテジーパターンのような実装です。
特に最後の1行、これが今回やりたいことのある意味すべてです。
IAnimalServiceの実装クラスが増えて、仮に100種類になったら、100分岐のif文になります。どんどん継ぎ足すコードとなり、見栄えも保守性も落ちてしまいます。

# 実装方法を考える
私がいろいろ調べたりする中で、3つほど方法が考えられました。
結論、下記3つめの実装を採

元記事を表示

Javaで「カレントディレクトリを取得する」の動作を確認してみた

# 概要
Javaで「カレントディレクトリを取得する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/file/index17.html

# 実装
以下のファイルを作成しました。
“`JSample17_1.java
import java.nio.file.Path;
import java.nio.file.Paths;

class JSample17_1{
public static void main(String[] args){
Path p1 = Paths.get(“”);
Path p2 = p1.toAbsolutePath();

System.out.println(p2.toString());
}
}
“`
以下のコマンドを実行しました。
“`
$ javac JSample17_1.java
$ java JSample17_1
/code/java/file
“`
以下のファイルを作成しました。
“`JSample17_2.java

元記事を表示

Spring Boot × PostgreSQL × Docker(Compose V2)でお手軽環境構築

## はじめに
こんにちは! @Keichan_15 です!

以前 [Spring BootとPostgreSQLのローカル環境構築に関するハンズオン](https://qiita.com/Keichan_15/items/b732bea7c9868c1e9f6c) を執筆した際に、ちょうどDockerを学んでいたこともあってDockerでも構築できるのかな~って興味本位で調べてみたら、どうやらありました!:clap:

今回はそれらを参考にしつつ、Dockerを使用してローカル環境を汚さずに比較的シンプルな構成で環境構築を行っていきたいと思います!

よろしくお願い致します!

## 環境
– Windows11(Windows10)
– Docker Desktop

## 準備
任意のディレクトリにフォルダを作成します。
自分は今回 `spring_boot` という名前のフォルダを作成しました。

“`:Windows PowerShell
> mkdir spring_boot
> cd spring_boot
“`
この時点で`Visual Studio Code`

元記事を表示

jEnvにaddされているJavaを解除する

## 現象

Oracle JDKからAmazon CorrettoのJDKに切り替えたかったが、
既に登録されているとエラーになる。

“`shell
$ jenv add /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
corretto64-17.0.7 already present, skip installation
17.0.7 already present, skip installation
17.0 already present, skip installation
17.0.7 already present, skip installation
“`

また、Open JDKをアンイストールすると、

“`shell
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
“`

一覧からは削除されたが、

“`shell
$ jenv versions
jen

元記事を表示

Amazon Correttoの特定のバージョンをインストールする

過去バージョンのAmazon Correttoが必要な場合、
GitHubのリリースからダウンロード出来る。

https://github.com/corretto/corretto-17/releases

例:Intel Macだと赤枠をダウンロードしてインストーラーからインストールする。

![Screen Shot 2023-08-08 at 17.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25578/12758942-1bc7-3f73-3ea2-368ad257b72a.png)

元記事を表示

Javaの勉強を始めたので要点をまとめてみた

備忘録

2023年8月8日〜 Javaの勉強を開始 随時編集していっています。

# Javaとは・・・?
プログラミング言語。Javascriptとは別物。
Webアプリケーションやアンドロイドアプリの制作に向いている。
求人数が非常に多い言語。2019年の求人数ランキングでは全体の3割の求人がJavaの求人。

# Javaのキーワード
#### コンパイラ言語
機械にとって認識しやすい言語

対義語はスクリプト言語
スクリプト言語は人間にとってわかりやすい文法でプログラムを構成するが、
コンパイラ言語は機械にとって認識しやすい言語にコンパイルする。

砕いていうのであれば、
スクリプト言語は、開発者(人)目線でのコーディングが可能な為、着手しやすく、スキル取得もしやすい。
しかし、機能には限界があるため、大規模なさまざまな機能を盛り込みたいサービスには不向き。
コンパイラ言語に比べ、拡張性が低い。

しかしながら、コンパイラ言語は、機械視点で作られている。
自由度が高い為、着手の難易度が高く、スキル取得の難易度も高い。
しかしながら、自由度が高いため、拡張性が高い。

スクリプ

元記事を表示

[速習] ドメイン駆動設計(DDD) 第1回 ソフトウェアのプロフェッショナルへの道 (レイヤードアーキテクチャと依存性の逆転/境界づけられたコンテキスト)

![k02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521573/df8b4299-8c0f-f7af-b67c-82122bdfbf4d.png)

https://qiita.com/ShigemoriMasato/items/73d25705f7db1b692047

前回の記事では、GPT-4 32kを用いたドメイン駆動設計(DDD)の新しい設計手法について説明しました。GPT-4 32kの大規模なコンテキストサイズを活用することで、複雑なタスクも無理なく実行でき、設計プロセスの効率化を大いに進めることができました。また、設計と実装の間のギャップを最小限に抑えることができ、開発者はドメインの複雑さを容易に理解し、それを反映した設計を効率的に行うことができました。これにより、新たな開発体験が実現しました。

今回は、前回の記事とは別に、ドメイン駆動設計(DDD)の具体的な概念と実装について掘り下げていきます。

## ドメイン駆動設計

ソフトウェア開発はビジネス要件の理解と技術的な実装と

元記事を表示

PythonでRedisに保存されたJavaオブジェクトを取得する

## 初めに
`javaobj-py`でRedisに保存されたJavaオブジェクトをPythonオブジェクトに変換してみました。手順は以下です。

## 1.まずredisに接続
PythonでRedisに接続するには、`redis-py`というRedisクライアントライブラリを使用します。
“`
import redis
import javaobj.v1 as javaobj

# バイト列のまま:decode_responses=False
connec = redis.Redis((host=’Redishost’, port=6379, db=0,decode_responses=False)

serialized_java_data = connec.get(‘MyKey’)

#バイト列であることを確認
print(type(serialized_java_data))
“`

## 2.java objectを取得
“`
# バイト列を読み取る
java_object = javaobj.loads(serialized_java_data)

# java_o

元記事を表示

Javaで「2つのパスを結合する(Path.resolve,Path.resolveSibling)」の動作を確認してみた

# 概要
Javaで「2つのパスを結合する(Path.resolve,Path.resolveSibling)」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/file/index16.html

# 実装
以下のファイルを作成しました。
“`JSample16_1.java
import java.nio.file.Path;
import java.nio.file.Paths;

class JSample16_1{
public static void main(String[] args){
Path p1 = Paths.get(“C:/data/image”);
Path p2 = Paths.get(“photo/profile.jpg”);
Path p3 = p1.resolve(p2);

System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}

元記事を表示

Leetcode 74. Search a 2D Matrix

https://leetcode.com/problems/search-a-2d-matrix/

# アプローチ
– binary search

“`java
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for (int[] m : matrix) {
Arrays.sort(m);

int left = 0;
int right = m.length – 1;

while (left <= right) { int mid = (left + right) / 2; if (m[mid] == target) { return true; } if (m[mid] < target

元記事を表示

スッキリわかるJava入門 第3版を読んでみて-part6-

# はじめに
こんにちは(・ω・)ノ
今回はクラスの分割について学びました!
## 第6章 複数クラスを用いた開発
### 1.ソースファイルを分割する
前回メソッドを複数に分けることを学んだ
だが…
メソッドの数が増えるとソースコードの全体を把握することが難しい…
⇨複数のソースファイルに分割して記述をする
 ≒複数のクラスに分けて開発する

メリット
ファイルごとに開発を分担し、分業がしやすくなる

1つのプログラムを複数の部品に分けること…部品化

計算機プログラムの分割
元のプログラム
“`
public class Calc {
public static void main(String[] args){
int a = 10; ing b = 2;
int total = tasu(a,b);
int delta = hiku(a,b);
System.out.println(“足すと”+total+”引くと”+delta);
}

public static int t

元記事を表示

静的ポリモーフィズムと動的ポリモーフィズム

## はじめに

[Clean Architecture](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656) を読んでいたら「動的ポリモーフィズム」という単語が出てきて、読んだだけではあまり理解できなかったので自分のためにわかりやすくまとめてみました。

## 要約

静的ポリモーフィズム:コンパイル時に解決されるポリモーフィズム

動的ポリモーフィズム:実行時に解決されるポリモーフィズム

## ポリモーフィズムの復習

ポリモーフィズムはオブジェクト指向における概念の一つです。
簡単に説明すると、**同じ名前のメソッドの呼び出しに対して異なる機能・動作をさせること**です。
詳細は

元記事を表示

commons-suncalc: Javaで太陽と月の位置を計算する

Java開発者の皆さん、太陽や月の位置、日の出や日の入りの時間、さらには月の相まで、これらの天文学的な情報を簡単に取得したいことはありませんか?
commons-suncalcは、そのためのJavaライブラリです。この記事では、このライブラリの主な特徴と使用方法、そして実装例を紹介します。

# **特徴**:
– **精度**: 結果の精度は約1分で、一般的なアプリケーションには十分です。
– **依存関係**: Java 8以上が必要ですが、他のランタイム依存関係はありません。
– **インストール**: Maven Centralで利用可能です。

# **Mavenでのインストール**:
commons-suncalcをMavenプロジェクトに追加するには、以下のスニペットを`pom.xml`に追加してください。
“`xml

org.shredzone.commons
commons-suncalc
最新のバージョン

元記事を表示

Spring BootのWebアプリケーションの基本②

前回の記事では、IntelliJの簡単な使い方やMVCモデルについて説明をしてきました。

今回からは実際にWebアプリケーションの開発をしていきます。

今回のファイル構成は、以下になります。


ファイル構成
.
├── .gradle
├── .idea
├── build
├── gradle
└── src
├── main
| ├── java
| | └──com
| | └──example
| | └── practice
| | PracticeApplication.java
| | ├── web

jar war ear

開発(実装)エンジニアとして20年ほどやってきて、デプロイや本番環境にかかわる機会が
ほとんどなかったです。
なので、jarとかwarとか言われても、圧縮されて纏まられてんだとって感じでしかありませんでした。

https://qiita.com/fusassy/items/31b8840878e371479ed1

こことかを読んで学んでみました。

# 違い

違いを簡単にまとめると

- いずれもJava仕様準拠定義のzip形式パッケージ
- Javaプログラムを実行・配布しやすくするための形式
- 規模感は、ear > war > jar
- 拡張子をzipに変更すると解凍ツールで開ける

# 作成方法

eclipseを利用するとわりと簡単そうです。

プロジェクト右クリックしてエクスポートで簡単にできそうです。
そこで、war、eat、jarを選択すれば。

Spring Boot 2.7 サポート終了について

# 概要

Spring Boot2.7のサポートが今年11月に終了するとのことで最近話をよく耳にするようになりました。
私はSpring Bootは3.xから入ったため、メジャーバージョン変更に伴ってどんな違いがあるのかや移行の大変さなどが気になり調べてみました。

内容としては基本的には、公式からでているMigrationGuideや各リリースノート等を参考に机上ベースとしてまとめた形です。
参考にしたサイト等は記事最後にまとめています。
# Spring Boot2.7から3.0にかけての変更
まず変更された点について見てみた限りでは以下が該当しそうでした。
- SpringFrameworkの対応ver
- JDKの対応ver
- Java EEからJakarta EEへ変更
- SpringBoot 2.xで非推奨APIの削除
- Dependency Version
- その他変更点
## Spring Frameworkの対応ver

まずSpring Bootのverによって、Spring Frameworkの利用可能なverが異なります。
Spring

【型変換】あれ?int?Integer?【初心者】

# はじめに
お久しぶりです!絶賛転職活動中のミツクマです?
関東の夏は故郷の夏と違う暑さでここ数日体調を崩していました(転職活動中でよかった。。)
さて、今回はプログラミングを久しぶりにしていて
初歩的なミスに陥ってしまったので戒めとともに備忘録として記事にしようと思いました。

# ことの発端
簡単なプログラミングをしているときに
「入力を受け付けた文字列を数字型に変換してメソッドの引数として扱う」といったものでした。
```
"1,2,3,4"
```
といった文字列を受け取り
```java
Scanner scanner = scanner.nextLine();
String[] testStrArray = scannerl.split(",");
int[] testNumArray = new int[testStrArray.length];
```
といった風に書き実行したところ
```
I@5b6f7412
```
と出てきました。
ポンコツな僕は、「????」となってしまい
色々調べました。
あれ?文字列から数字型への変換間違えているっけ?
あれ?数字以外を変