1.예약어
-> 자바(java)에서 미리 정해둔 명령어입니다.
2.List
-> 데이터를 저장하고 관리하는 자료 구조 중 하나입니다.
-> 순서가 있는 데이터의 모음으로, 중복된 데이터를 저장할 수 있습니다.
자바에서는 다양한 List 인터페이스를 제공합니다.
- ArrayList:가변 크기의 배열로 구현된 List. 데이터의 추가, 삭제, 검색 등의 작업에 용이합니다..
- LinkedList: 연결 리스트로 구현된 List이다. 데이터의 추가, 삭제에 용이하며, 순차 접근 보다는 임의 접근이 빠릅니다.
- Vector: ArrayList와 유사한 List이다. 스레드 안정성을 보장하므로 멀티스레드 환경에서 사용합니다.
- Stack: 후입선출(LIFO) 구조를 가지는 List이다. push()와 pop() 메서드를 이용하여 데이터를 추가, 삭제합니다.
List<String> list = new ArrayList<>();
//데이터 추가
list.add("apple");
list.add("banana");
list.add("orange");
//데이터 삭제
list.remove(1);
//데이터 검색
System.out.println(list.contains("apple")); //true
//모든 데이터 출력
for(String item : list){
System.out.println(item);
}
3.Class
- 변수와 메서드의 집합입니다.
- 객체 지향 프로그래밍에서 객체를 생성하기 위한 일종의 틀입니다.
- 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메서드로 구성됩니다.
public class Person {
// 필드
private String name;
private int age;
private String gender;
// 생성자
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// 메서드
public void walk() {
System.out.println("걷습니다.");
}
public void run() {
System.out.println("뛰어갑니다.");
}
public void sleep() {
System.out.println("잠을 잡니다.");
}
// Getter, Setter 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
4. 생성자
-> 객체를 생성할 때 필요한 초기화 작업을 수행하는 메서드입니다.
5.this
-> 인스턴스 자기 자신을 가리키는 키워드입니다.
6. 도메인 모델
-> 객체 지향 프로그래밍에서 사용되는 개념 중 하나로, 소프트웨어 시스템이 다루는 문제 영역을 객체로 표현한 것을 말합니다.
자바에서 도메인 모델은 일반적으로 클래스와 객체로 구현되며, 도메인에서 발생하는 역할, 책임, 권한 등의 개념을 적절한 객체로 표현하고 이들 객체 간의 관계를 정의합니다. 이렇게 도메인 모델을 정의하면 시스템을 이해하기 쉬워지고 유지보수가 편리해집니다.
자바에서 도메인 모델은 보통 비즈니스 로직을 처리하는 부분에 사용됩니다. 예를 들어 은행 시스템에서 계좌를 모델링하는 경우, 계좌 객체를 생성하고 이를 통해 입금, 출금, 잔액 조회 등의 작업을 수행합니다. 이러한 작업은 도메인 모델 내에서 처리되며, 이를 위해 자바에서는 객체지향적인 설계 원칙과 패턴을 적용하여 코드를 작성합니다.
7.상속과 위임
-> 상속은 부모 클래스에서 정의된 멤버 변수와 메서드를 자식 클래스에서 그대로 물려받아 사용하는 것을 말합니다. 자식 클래스는 부모 클래스의 모든 멤버를 사용할 수 있기 때문에, 코드 재사용성이 높아지고 클래스 간의 계층 구조를 만들어내는 데에도 유용합니다. 상속은 자식 클래스가 부모 클래스의 기능을 확장하거나 변경할 수 있는 유연성을 제공하기도 합니다.
위임은 객체 간의 관계를 설명하는 데 사용되는 기법입니다. 위임은 한 객체가 다른 객체에게 자신의 일부 기능을 위임하고, 그 결과를 받아 처리하는 것을 말합니다. 예를 들어, 자동차 클래스가 핸들링을 처리할 때, 핸들링 기능을 가진 별도의 객체(SteeringWheel)에게 위임하여 처리합니다. 이러한 방법은 코드 재사용성과 확장성을 제공하면서 클래스 간의 결합도를 낮추는 데에도 유용합니다.
따라서, 상속과 위임은 모두 코드 재사용성과 확장성을 제공하지만, 상속은 부모 클래스의 멤버를 그대로 물려받아 사용하는 반면, 위임은 다른 객체에게 자신의 일부 기능을 위임하여 처리합니다. 이러한 차이로 인해, 상속은 클래스 간의 계층 구조를 만들어내는 데에 유용하며, 위임은 객체 간의 결합도를 낮추는 데에 유용합니다.
8.오버로딩
-> 자바에서 오버로딩(Overloading)은 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다. 이때 메서드의 시그니처(signature)가 서로 다르게 구성되어야 합니다.
메서드의 시그니처는 메서드의 이름, 매개변수의 개수, 순서, 타입 등을 모두 포함한 것입니다. 따라서, 오버로딩된 메서드는 같은 이름을 가지지만, 시그니처가 다르기 때문에 컴파일러는 이를 구분하여 사용할 수 있습니다.
오버로딩은 메서드의 이름을 직관적으로 지을 수 있도록 도와주며, 매개변수의 타입이나 개수가 다른 경우에도 같은 이름의 메서드를 사용할 수 있도록 해줍니다. 또한, 오버로딩을 사용하면 같은 기능을 하는 메서드를 여러 개 작성하지 않아도 되므로, 코드의 중복을 줄일 수 있습니다.
다만, 오버로딩을 남용하면 코드의 가독성이 떨어지거나 예기치 않은 결과를 가져올 수 있기 때문에, 적절한 경우에만 사용해야 합니다. 또한, 오버로딩된 메서드 중 어느 것이 호출될지 결정하는 데에는 정적 바인딩(static binding)이 사용되므로, 메서드 호출 시에는 컴파일러가 가장 적합한 메서드를 선택하게 됩니다.
9.라이브러리
-> 자바 개발에 필요한 다양한 기능을 제공하는 소프트웨어 모음입니다.
자바 라이브러리는 JDK(Java Development Kit)에 기본적으로 포함되어 있으며, 개발자들은 이를 활용하여 자신이 필요한 기능을 쉽게 구현할 수 있습니다.
자바 라이브러리는 다양한 분야에서 사용됩니다. 예를 들어, 네트워크 프로그래밍에서는 java.net 패키지를 사용하여 소켓 통신, URL 연결 등을 구현할 수 있으며, 데이터베이스 연동에서는 JDBC(Java Database Connectivity) API를 사용하여 데이터베이스와 연결하고 SQL문을 실행할 수 있습니다. 또한, GUI(Graphical User Interface) 프로그래밍에서는 Swing과 AWT(Abstract Window Toolkit) 라이브러리를 사용하여 다양한 그래픽 컴포넌트를 구현할 수 있습니다.
또한, 자바 라이브러리는 여러 오픈소스 프로젝트를 포함하고 있습니다. 이러한 오픈소스 라이브러리는 자바 개발에 유용한 다양한 기능을 제공하며, Maven과 Gradle과 같은 빌드 도구를 사용하여 쉽게 프로젝트에 추가할 수 있습니다.
자바 라이브러리는 개발 생산성을 높이고 코드의 재사용성을 높이는 데에 큰 역할을 합니다. 또한, 자바 라이브러리는 다양한 프로젝트에서 사용되는 공통적인 기능을 제공하므로, 자바 개발자들은 이를 적극적으로 활용하여 보다 빠르고 안정적인 애플리케이션을 개발할 수 있습니다.
10. .csv파일 관련 코드
CSV 파일 쓰기
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadCSVFile {
public static void main(String[] args) {
String csvFile = "data.csv";
String line = "";
String cvsSplitBy = ",";
try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
while ((line = br.readLine()) != null) {
// CSV 파일의 각 필드는 쉼표로 구분되어 있음
String[] data = line.split(cvsSplitBy);
// 각 필드에 대한 작업 수행
// ...
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 코드는 data.csv 파일을 읽어서 각 필드에 대한 작업을 수행하는 예제입니다. CSV 파일의 각 필드는 쉼표로 구분되어 있으므로, BufferedReader 클래스와 FileReader 클래스를 사용하여 파일을 읽은 후에는 split() 메서드를 사용하여 각 필드를 추출할 수 있습니다.
CSV 파일 쓰기
import java.io.FileWriter;
import java.io.IOException;
public class WriteCSVFile {
public static void main(String[] args) {
String csvFile = "data.csv";
String[] headers = {"Name", "Age", "Gender"};
String[][] data = {
{"John", "25", "M"},
{"Jane", "30", "F"},
{"Tom", "35", "M"}
};
try (FileWriter writer = new FileWriter(csvFile)) {
// CSV 파일의 헤더 쓰기
writer.write(String.join(",", headers));
writer.write("\n");
// CSV 파일의 각 행 쓰기
for (String[] row : data) {
writer.write(String.join(",", row));
writer.write("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 코드는 data.csv 파일에 데이터를 쓰는 예제입니다. FileWriter 클래스를 사용하여 파일을 열고, String.join() 메서드를 사용하여 쉼표로 구분된 각 필드를 하나의 문자열로 만들어서 파일에 씁니다. 헤더와 각 행은 개행 문자("\n")로 구분됩니다.
'TIL' 카테고리의 다른 글
Day32(입력받은 값이 비어 있지 않고, 숫자로 이루어져 있는지를 확인하는 조건문) (0) | 2023.03.05 |
---|---|
Day31(객체지향 프로그래밍,생성자,오퍼레이션,결합도,List와ArrayList차이점,구현체,인터페이스) (0) | 2023.03.04 |
Day29(객체지향 프로그램 작성에 대한 방향성,TDD 작성시 생각할 점,참조) (0) | 2023.03.02 |
Day28(프로그램 종료 후에도 화면 그대로 유지,getComponent) (0) | 2023.03.01 |
Day27 (0) | 2023.02.28 |