no image
SOLID
SOLID 객체지향 프로그래밍에서 좋은 소프트웨어 설계를 위해 사용되는 다섯 가지 기본원칙입니다. 이 원칙들도 땅에서 솟아서 갑자기 나온 게 아니라 응집도는 높이고 결합도는 낮추는 고전 원칙을 객체 지향의 관점에서 재정립한 것이라고 할 수 있습니다. 결합도와 응집도 결합도 소프트웨어의 모듈 간에 서로 얼마나 강하게 연결되어 있는지를 나타냅니다. 높은 결함도는 모듈 간의 의존성이 높은 것을 의미하며 한 개의 모듈을 변경할 때 다른 모듈들에게 영향을 미칠 수 있음을 나타냅니다. 응집도 모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다. 높은 응집도를 갖는 모듈은 코드의 가독성이 향상되고 모듈을 이해하기 쉬워집니다. SRP - 단일 책임 원칙 소프트웨어 컴포넌트, 클래스, 함수, 모듈 등이 하..
2023.11.11
no image
Pubilc과 Private
public과 private 그것이 문제로다... public과 private의 선택의 길에서 고를 때 항상 왜 뭘 써야 하지라고 생각하게 되어서 Public과 Private에 대해 알아보게 되었습니다. 접근 제어자 프로그래밍 언어에서 클래스, 메서드, 변수 및 다른 멤버들에 대한 접근 권한을 제어하는 데 사용합니다. 제어자는 코드의 보안, 모듈성 및 유지보수를 향상하는데 도움이 됩니다. public 어떤 클래스나 패키지든 접근이 가능하며, 패키지에서 자유롭게 사용할 수 있습니다. 외부에서 직접 접근할 수 있으므로 주로 라이브러리, API, 인터페이스 등에 사용합니다. 주의해서 사용해야 하며, 인터페이스와 추상 클래스의 메서드 등에 많이 사용합니다. public class Class{ public int..
2023.11.01
no image
Stream(기초)
Stream 데이터 처리 작업을 간결하게 수행하고 병렬 처리를 쉽게 지원하며 성능을 향상하는 역할을 하며 중간 매개자 역활도 가지고 있습니다. stream 사용 stream 에는 중간연산(Intermediate Operation)과 최종연산(Terminal Operation)이 있습니다. 중간연산은 이런저런 작업이 필요 없이 여러 번 사용 가능합니다. 최종연산은 최종적으로 나아지는 결과물을 말하며 한 번만 사용 가능합니다. stream의 종류는 다양하고 자주 사용하는 stream 알아보겠습니다. 정수형 stream int[] scores = {100, 80, 97, 67, 80} Arrays.stream(scores) .filter(x -> x >= 90) .forEach(x -> System.out.p..
2023.10.30
no image
Lambda
람다(Lambda) 함수형 프로그래밍을 지원하고, 코드를 더 간결하게 작성할 수 있도록 도와줍니다. 람다는 익명 함수의 일종으로 메서드를 하나의 식으로 표현하는 방법입니다. 익명 함수 이름이 없는 함수로, 주로 프로그램의 특정 부분에서 일시적으로 사용되고 다른 함수에서 인수로 전달되는 함수입니다. 특징 익명 함수는 이름을 가지지 않고 익명함수는 함수명을 가져야 한다는 제한이 없습니다. 익명 함수를 이용했을 때는 코드를 간결하게 만들 수 있습니다. 람다식 : 간결한 형태의 코드 뭉치 (전달값1, 전달값2, ...) -> {코드} EX1 public void print() { String s = "test"; System.out.println(s); } 람다식으로 바꾸려면 접근제어자인 public 필요가 x..
2023.10.29
no image
Static 사용?
Static? 정적 변수는 특정 클래스와 연관된 변수를 나타냅니다. 이러한 변수는 클래스 수준에 정의되며 해당 클래스의 모든 객체 인스턴스 간에 공유됩니다. 정적변수 (Static Variables) 특정 클래스와 관련이 있으며 클래스의 모든 인스턴스(객체)에 의해 공유되며 동일한 값 또는 상태를 가집니다. 정적 변수는 객체 지향 프로그래밍 언어에서 자주 사용되며 클래스의 모든 인스턴스가 공유해야 하는 데이터를 저장하는 데 유용합니다. 정적 변수에는 클래스 이름을 사용하여 액세스 할 수 있으며 객체 참조가 아닌 클래스 이름을 이용합니다. class MyClass{ Static int staticVar = 10; 정적 변수 액세스 int value = MyClass.staticVar; 정적 메서드 (Sta..
2023.10.27
no image
HashSet, HashMap
HashSet 중복된 원소를 허용하지 않고, 순서를 보장하지 않는 집합을 구현하는 클래스입니다. HashSet 특징 중복된 원소 사용하지 않습니다. 순서를 보장하지 않습니다. 빠른 검색과 삽입이 가능합니다. public class HashSet { public static void main(String[] args) { //세트 - 중복 허용 x // HashSet 사용시 순서도 보장 되지 않고 중복도 허용되지 xx HashSet set = new HashSet(); //데이터 추가 set.add("삼겹살"); set.add("쌈장"); set.add("음료"); set.add("소금"); set.add("후추"); set.add("깻잎"); set.add("삼겹살"); set.add("상추"); set..
2023.10.23
no image
Generics
Generics 프로그래밍 언어에서 여러 데이터 타입에 대해 일반화된 알고리즘, 클래스, 인터페이스를 작성할 수 있도록 해주는 프로그래밍 기법입니다. 제네릭스를 사용하면 코드의 재사용성을 높이고 타입 안전성을 제공하며, 불필요한 형변환을 줄일 수 있습니다. 또한 다양한 타입의 객체를 지원하는 클래스나 인터페이스 또는 메서드를 정의하며 똑같은 동작을 하는 클래스나 메서드를 여러 번 만들 필요 없이 한 번만 정의하고 나서 여러 타입에 대해 지원할 수 있도록 해주는 역할입니다. public class Generics { public static void main(String[] args) { Int[] iArray = {1,2,3,4,5}; // 기본 자료형 ) (int double, float, boolea..
2023.10.22
no image
Super
super super는 상속 관계에서 부모 클래스의 멤버를 참조할 때 사용하는 키워드입니다. 단일 상속만 지원하는 자바에서 Super는 바로 상위 클래스의 인스턴스를 지정하는 키워드 입니다. super() super()는 자식 클래스의 생성자에서 부모 클래스의 생성자를 호출하기 위해 사용됩니다. super() 는 생성자 코드 안에서 사용될 때, 다른 코드에 앞서 첫 줄에 사용되어야 합니다. 자식 클래스의 생성자에서 명시적으로 super(매개변수)와 같이 특정 부모 클래스의 생성자를 호출할 수 있습니다. 자바 클래스 간에서 상속 관계에 있을 때, 자식 클래스는 부모 클래스의 특성과 메서드를 상속받고 자식 클래스에서 부모 클래스의 멤버와 동일한 이름을 가진 멤버를 정의할 수 있습니다. class HamBur..
2023.10.21
no image
인터페이스와 추상 클래스
인터페이스 인터페이스는 추상화된 메서드의 집합을 나타내는 틀입니다. 클래스와 달리 추상 메서드만을 가질 수 있고, 멤버 변수나 일반 메서드를 가질 수 없습니다. 인터페이스는 다른 클래스에서 구현할 수 있는 메서들을 정의하는 데 사용하며 자바에서는 다중 상속을 지원하지 않기 때문에 여러 클래스에서 공통적으로 사용될 메서드를 인터페이스로 정의하고 구현함으로써 다중 상속과 유사한 기능을 가지고 있기 때문에 인터페이스는 기본 설계도라고 생각할 수 있습니다. (ex) 인터페이스 (interface) public interface MyInterFace { // 추상 메서드 정의 void myMethod(); // 또 다른 추상 메서드 정의 void anotherMethod(); } (ex) 구현 (implement..
2023.10.20