chapter2 알고리즘 주차가 시작되었다.
오전에는>
알고리즘 주차의 발제 세션을 들었고, 새로운 팀원 분들과 간단히 소통했다.
또한 InteliJ IDE(Ultimate)를 설치하여 Java 환경 세팅을 마무리했다.
이번 주의 과제는 크게 두 가지로, 아래와 같다.
1. 40~ 53개의 알고리즘 문제 풀이
2. OOP 구현 코드 작성
주간 계획을 세우기 위해 각자 4번 까지의 문제를 풀었고, OOP 구현 과제의 틀을 잡았다. (알고리즘은 주특기 언어인 Java로 풀어야해서, 파이썬으로 풀 때에 비해 조금 더 시간이 걸릴 것 같다.)
오후에는>
4번 까지의 알고리즘 풀이 현황을 공유했다. 운 좋게도 팀장님이 전공자였고, 문법 / 성능 관련 팁을 많이 얻을 수 있었다.
그 중 Java의 String
과 StringBuilder
/ StringBuffer
의 차이에 대해 알게 되었고 바로 구글링하여 공부했다!
String
클래스는 Immutable, 불변성을 지닌다. 따라서 한번 생성되면 할당된 메모리 공간이 변하지 않는다. 즉 연산이 이루어져도 해당 객체가 변하는 것이 아니라 새롭게 문자열을 생성한다. (Heap 메모리 영역에 생성) 따라서 복잡한 코드에서 성능상의 이슈가 발생한다.StringBuffer
와 StringBuilder
는 Mutable, 가변성을 지닌다.그렇다면 멀티스레드
, 단일스레드
환경이 무엇일까??...
<출처: https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj>
앞으로 하게 될 스프링 프로젝트에서, 내가 작성할 Java코드는 멀티 스레드 환경에서 실행되니 StringBuffer 클래스를 활용하자!!!
정리해보자면!! 내가 작성하는 Java 코드가 어떤 환경에서 실행이 되는 지를 파악하고, 멀티스레드 환경이라면 StringBuffer 클래스를, 싱글스레드 환경이라면 StringBuilder 클래스를 사용하는 것이 성능적으로 이슈를 줄인다는 결론을 얻었다.
이를 앞으로 학습하게 될 스프링 프레임워크에 적용해보자면,
싱글톤 패턴이 뭔데??
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
}
public static Singleton getInstance() {
return instance;
}
public void say() {
System.out.println("hi, there");
}
}
Thread-safe
를 보장한다는 이점을 지닌다. !!!시작은 String/StringBuffer/StringBuilder 였지만, 파고파고 들어오다 보니 스프링, 싱글톤 패턴까지 와버렸다. (무의식의 흐름,,)
변수 = (논리 조건) ? true일 때 실행되는 기능 : false일 때 실행되는 기능
앞에 변수를 지정해주지 않으면 오류가 난다. (딱히 성능을 높여주는 것도 아니라, 제한적으로 사용 가능할 것 같다)
Arrays.deepToString: 2차원 배열의 경우 toString을 쓸 경우 내부 배열은 주소로 출력되기 때문에 내부 배열도 스트링으로 얻기 위해선 deepToString을 사용해야한다.
char 타입 간 뺄셈이 int로 형변환 되는 것.. 은 다음에 공부!
아스키 코드표에서 십진법 부분이 실제 저장되는 값이고, 의미 부분은 표출되는 값!
알고리즘 문제 풀이 시, 정답 처리에만 집중하지 않고 성능면에서도 검토해보기.
알고리즘 강의 들으면서 병행하기!