본문 바로가기

728x90

전체 글

[Java] equals 와 hashCode - 객체 일 경우 /* equals와 hashCode*/ Java의 모든 객체는 equals와 hashCode 함수를 상속받고 있다. /* equals*/ equals는 두 객체가 동등한지 비교한다. String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); //false 메모리 주소 비교 System.out.println(s1.equals(s2)); //true 값 비교 /*equals - 객체일 경우*/ Person person1 = new Person("Person1",20); //Person(String name,int age) Person person2 = new Person("Person1",20); System.out.println(pers.. 더보기
[Git] branch merge 전략 /* Merge 종류 */ PR을 올리고 담당자는 merge를 어떤 식으로 할 지 결정을 해야 한다. 사진에서 처럼 Github에서는 3가지의 Merge 전략이 있다. Merge Commit Squash and merge Rebase and merge /* Merge Commit*/ 일반적으로 많이 사용되는 merge 전략이다. 예시를 보면 feature 브랜치를 main 브랜치에 merge하고자 할 때 Git은 자동으로 새로운 merge commit을 생성합니다. merge commit은 두 브랜치의 변경 사항을 포함합니다. 따라서 두 브랜치 사이에는 충돌이 없어야 합니다. 해당 merge 전략의 장점은 두 브랜치의 history를 보존하고 조회할 수 있습니다. /* Squash And Merge*/.. 더보기
[JAVA] 불변 객체 & 불변 클래스 커스텀 불변 클래스를 어떻게 만드나요? 자바에서 불변 클래스의 예는 무엇인가요? /* 불변 객체란? */ 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. Java의 대표적인 불변 객체로는 String이 있다. String a = "aa" 에서 a = "bb" 로 한다면, 여기서는 a의 String 객체 자체는 불변이지만 참조하는 객체의 변수를 변경할 수는 있다. 변수에 'final'을 적용하면 그 변수는 한 번 초기화되면 그 값을 변경할 수 없다. 따라서 객체가 생성되고 초기화되면 그 객체는 불변 객체가 된다. 그 외 불변객체로는 LocalDateTime, Integer, Long 드잉 있다. /* 불변 객체 및 final */ 1. 멀티 쓰레드 환경에서는 동기화를 고려하지 않아도 된다.. 더보기
[Git] Github Actions - CI 작성 /* CI 란? */ CI = Continous Integration = 지속적인 통합 개발 과정에서 코드 변경 사항을 지속적으로 통합한다. 풀어 쓰자면, Git 저장소에 코드가 push 되면 CI 도구가 코드를 자동으로 가져와 CI Server안에서 빌드를 하고 테스트를 수행한다. 이 과정에서 사전에 버그를 발견할 수 있다는 이점이 있다. 하지만, CI만 설정할 경우 자동으로 내가 설정한 웹사이트에 반영이되어 배포가 되는 것은 아니다. 이해관해서는 CD = Continous Deployement (지속적 배포) 과정이 시작되어야 한다. /* Github Actions */ CI 세팅을 위해서는 여러가지 방법이 있는데, Github Actions를 택했다. 방법은 다음과 같다. 루트 디렉토리에 .git.. 더보기
[Git] 깃 정리 #1 /* 용어 정리 */ Committed : 데이터가 로컬 데이터베이스에 안전하게 저장 Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋 안함 Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태 Tracked : 파일이 깃의 관리 하에 있는지 아닌지의 여부 Git 디렉토리 : Clone 한 것 워킹 트리 : 특정 버전의 checkout Staging Area : 곧 커밋할 파일 /* Git */ $ git status : 파일의 상태 확인 $ git diff : 수정했지만 아직 staged상태가 아닌 파일 (git add 를 안한 파일) $ git diff --staged : Staging Area에 넣은 파일의 변경 부분 조회 $ git rm "a.txt" : 삭제한 파일은.. 더보기
[아키텍처] SOLID 원칙 /* SOLID 원칙 */ 아키텍처를 구성하거나 코드를 짤때 생각해야 하는 5대 원칙이다. 이 5대 원칙은 사용자 관점에서의 설계를 지향한다. SRP 단일책임원칙 OCP 개방-폐쇄 원칙 LSP 리스코프 치환 원칙 ISP 인터페이스 분리 원칙 DIP 의존 역전 원칙 /* 단일 책임 원칙 (SRP) */ 클래스는 단 한개의 책임을 가져야 한다. (하나의 컴포넌트는 하나의 책임을 담당해야 한다. 컴포넌트를 변경하는 이유는 하나여야 한다.) ex) 두개의 객체가 하나의 메소드를 공유해서 쓴다고 가정해보자. 수정 사유가 있어 하나의 객체에 있는 메소드를 변경해야 할때, 자연스럽게 다른 하나의 객체가 영향을 받는다. /* 개방 폐쇄 원칙 (OCP) */ 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다. ex) .. 더보기
[JAVA] 컬렉션 - LinkedList /* LinkedList란?*/ ArrayList는 내부 배열에 객체를 저장하지만, LinkedList는 인접 객체를 체인처럼 연결해서 관리한다. LinkedList의 경우 삭제/삽입의 시간복잡도가 O(1)이다. /* 메소드 */ package Collections; import java.util.*; import java.io.*; public class LearnLinkedList { public static void main(String[] args){ List list = new LinkedList(); list.add(1); list.add(2); list.add(2,3); // index 2에 3을 추가 System.out.println(list.toString()); // [1, 2, 3] .. 더보기
[JAVA] 벡터 Vector /* Vector란? */ Vector는 ArrayList와 동일한 내부 구조를 가지고 있다. 차이점은 Vector는 동기화된 (synchronized) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Vector()메소드를 실행할 수 없다. 그렇기 때문에 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있다. -> 이 말인 즉슨, Vector()메소드들이 여러 스레드에 의해 동시에 호출되더라도, 한 시점에 하나의 스레드만이 메소드를 실행할 수 있도록 제한. /* 테스트 */ package Collections; import java.util.Vector; public class LearnVector { public static void main(String[] args){ Vector .. 더보기

728x90