대량 G/L Account를 생성 (복사) 시에는 언어는 단일 언어만 설정이 된다

기본은 단일 국가로 Live를 하지 않는 이상 EN이 기본이 될 것으로 보여진다

하지만 언어를 KO로 대량 복사를 해야하는 일이 있다면 아래 설정을 참고...

 

1. [CBC] Edit Chart Of Accounts List - 102422 

 

2.  유지보수 언어 : 한국어 로 설정

 

적용 시 운영 계정관리 앱에서 대량 복사를 할때 G/L 계정 내역을 한국어로 입력하여 적용 시킬 수 있다.

강릉 여행중..

 

10년동안 몸담았던 회사를 퇴사 하고나서 무엇이든지 해야만 하였다.

아픔이 낫지를 않았고, 죄책감인지 책임감인지 아무튼 개같은 느낌이 나를 계속 옥죄였다

 

무엇이든지 다시 부딪힐게 필요했고.. 부트캠프를 하게되었고 예전부터 계속 하고싶었던 개발자가 되고싶었다

 

물론 부트캠프를 마치고 나온건 아니다

부트캠프 최종 프로젝트 전 같이 일하고싶던 분들에게 입사 제안을 받아 중도 퇴소를 하게되었다

 

부트캠프를 들어갈때만해도 뭐라도 잡아보겠다는 심정으로 갔지만 정작 내가 배운건

정말 세상에는 다양한 사람들이 있다는 것, 그리고 우습게만 보았던 젊은 친구들이 누구보다 꿈을 향해 열심히 노력하는 모습,

배울점은 선배가아닌 후배에게도 있다는거

 

내가 만약 이 기간을 겪지 않았으면, 내가 이 선택을 하지않았다면...

 

반년이라는 시간이 흘러 글을 쓰게 됐지만

목표는 이루지못했지만 나라는 인간에게 많은 도움이 되는 시간이 아니였나 싶다

물론 혹시 그 누군가 나와 같은 고민을 하게된다면 아프더라도 부딪혀 보길 바랍니다...

최근 개인 프로젝트를 진행하면서 GithubCopilot이 괜찮다는 소식을 듣고 냉큼 결제를 해서 사용을 해보는 도중에
자꾸 답변을 영어로 하는바람에 "한글로 답변해줘"라는 문구를 달고 문의를 하다보니 귀찮더라 그래서 해결방법을 찾아보았다.

 

♦︎ IDE 공통 세팅

 IDE ▶︎ Setting ▶︎ github Copilot ▶︎ Chat (Natural Language) ▶︎ Korean 선택

 

! IntelliJ 의 기준으로 설명하지만 VS Code 설정부분은 똑같다.
! 그리고 VS Code에서는 ChatGpt 간 버전설정이 가능하지만 25년 1월 기준 IntelliJ에서는 선택이 불가능하다

 

끝.

스트림(Stream API) 활용기

스트림을 활용하면 얼마나 코드가 짧아지는가.
그간 배우기를 두려워하면서 람다만 나오면 뒤로 주춤하던 내모습
조금은 더 친숙해 지도록 노력이 필요할 것같다.

기존 사용 내역

 public String randomNumberCreate() {
        List<Integer> computer = new ArrayList<>();
        while (computer.size() < 3) {
            int randomNumber = Randoms.pickNumberInRange(1, 9);
            if (!computer.contains(randomNumber)) {
                computer.add(randomNumber);
            }
        }

        StringBuilder stringBuilder = new StringBuilder(3);
        for (Integer i : computer) {
            stringBuilder.append(i);
        }

        return stringBuilder.toString();
    }    
  • 랜덤 숫자 3종류를 받아 ArrayList에 저장한다
  • 빌더를 생성하여 arraytList에 생성된 자료를 저장한다
  • 그리고 빌더를 리턴한다.

Stream을 이용해보자

return Stream.generate(() -> Randoms.pickNumberInRange(1, 9)) // 1~9의 숫자의 랜덤 숫자를 배분한다
                .distinct()// 중복을 제거 해준다
                .limit(3)//3개까지만 생성해준다
                .map(Object::toString) // Integer -> String 변환
                .collect(Collectors.joining()); // 값을 붙여준다. -> 최종

스트림을 활용하면 보다 함수 스타일로, 간결하게 표현할 수 있음을 알 수 있다.

혹시 더 Stream에 대해 더 공부하고 싶다면 [모던 자바 인 액션]이라는 책을 추천한다.

끝.

14주차 리뷰

▶︎ 교육 과정

  • 토이프로젝트 2차 종료 [팀 3조]  
  • 토이프로젝트 2차 종료 및 발표 [팀 3조]  

▶︎ 개인 공부 및 어려웠던점  

  1. Java Stream 공부 With 모던 자바인 액션  
  2. Restful API 구현 실습 With Restful API 서버 구현  
  3. git + git hub 구현 연습  
  4. 새로운 모든것들이 무서울 지경이다.  

남과 비교하지말자

 

 

Spring을 공부하다 보니 DI(Dependency Injection)이라는 부분이 정말 너무 이해가 되지 않았다.

그리고 더욱 슬픈 건 UML조차도 이해가 되지 않았다. 

 

그래서 직접 공부 후 JAVA 예제, Intellij의 Diagram기능을 활용해서 UML로도 분석한 기록을 남긴다.

 

◆ 예제 코드

public interface Service {
    void sendMessage(String message, String recipient);
}

 

> 서비스 인터페이스를 생성한다

 

public class FakeService implements Service {
    @Override
    public void sendMessage(String message, String recipient) {
        System.out.println("Fake send message " + recipient + " to " + message);
    }
}

 

public class RealService implements Service{
    @Override
    public void sendMessage(String message, String recipient) {
        System.out.println("Real send message " + recipient + " to " + message);
    }
}

 

> Service를 Impl (implements)하는 클래스 2개를 구현한다 (FakeService, RealService)

 

public class MessageSender {
    private final Service service;

    public MessageSender(Service service) {
        this.service = service;
    }

    public void send(String message, String recipient){
        service.sendMessage(message, recipient);
    }
}

 

> 그리고 이 서비스들을 주입받아 사용하는 클래스 MessageSender를 구현한다

> 여기서 Service 인터페이스를 활용(다형성) 주입받은 sendMessage를 사용할 수 있게 한다

 

public class main {
    public static void main(String[] args){
        MessageSender messageSender = new MessageSender(new RealService());
        messageSender.send("helloWorld Java", "hihihihi@email.com");

        MessageSender fakeSender = new MessageSender(new FakeService());
        fakeSender.send("helloWorld Java", "hihihihi@email.com");
    }
}

 

> Messeage Sender에 각 서비스들을 주입하니 주입한 구현정보들이 출력되는 것을 알 수 있었다.

> 실행 후 콘솔은 아래와 같다.

 

< console >

Real send message hihihihi@email.com to helloWorld Java
Fake send message hihihihi@email.com to helloWorld Java

 

 UML ( Feat. Intelli J Ultimate )

 

> main은 MessageSender를 통해 주입받은 객체를 활용하는 것을 알 수 있다. 

> MessageSender는 service라는 interface의 다형성을 주입받아 활용된다는 것을 알 수 있다.

> 이렇게 UML로 다시한번 그려서보니 더욱더 이해가 잘되는것같다.

 

[끝]

11 ~ 13주차 리뷰

많은 일들은 있엇지만 블로그를 더이상 놓았다가는 또다시 놓을것같아 몰아서 한번에 쓴다.

 

▶︎ 교육 과정

  • 토이프로젝트 1 차 진행 [팀 3조]  쇼핑몰 ERD 제작 1주일
  • 토이프로젝트 2차 진행 [팀 3조] 쇼핑몰 SPRING 기반 구성 (14주차 까지 진행)

▶︎ 개인 공부 및 어려웠던점

  • ERD(Entity Relastionship Diagram)를 오랫만에 다시 작성해보려고하니 말이 안되는 부분들이 상당히 많았었음 
    > 그래도 팀원들과 논의하면서 ERP보다는 가볍고 쇼핑몰 기능에 가까운 기능으로 만드는것 방향으로 진행
    > 그래도 ERD는 어찌어찌 종료  
  • "SPRING FrameWork" 스프링은 요즘 누구나 기본으로 해야한다지만 벅찬 부분들이있어 매일이 접근하기 어려웠던것같다
    > 그래도 팀원들과 같이 스터디해가면서 하루하루 해나가는부분들이 정말 좋았다
  • 팀원들중에 실력자분의 PR 리뷰 피드백 처리
    > 팀원분중 실력이 정말 좋은분이 계시는데 이분께서 PR해주는 부분을 바로바로 쳐내지 못하는 부분이 너무 슬펐다
    > 그래도 어떻게든 따라 붙어보려고 어떻게든 조금씩 공부해가면서 붙어있었다.
    > 피드백 받은부분은 블로그에 하나씩 정리해서 처리하자.
남과 비교하지말자.

'일기 > 2024' 카테고리의 다른 글

[백엔드 부트캠프]14주차 리뷰  (0) 2025.01.06
[백엔드 부트캠프] 10주차 리뷰  (0) 2024.12.02
[백엔드 부트캠프] 9주차  (0) 2024.11.27
[백엔드 부트캠프] 8주차  (0) 2024.11.19
[백엔드 부트캠프] 7주차  (0) 2024.11.10

 

10주차 리뷰

 

▶︎ 교육 과정

  • Spring - DB, MyBatis, 게시판 만들기
  • JS (쟈스~) - 기초교육, 실습

▶︎ 개인 공부

  • MyBatis3 설정
  • 게시판 만들기 
  • Spring boot 기초 공부
남과 비교하지말자.

 

 

9주차 리뷰 ( 11.18 ~ 11.24 )

 

▶︎ 과정 (강사님, 과제, 프로젝트..)

  • Spring 
  • JS 
  • DB 튜닝 시험 (망함)

▶︎ 개인 학습

  • 스프링 개인학습 !!!  
남과 비교하지 말자.

 

 

 

Intelli J를 쓰면서 제일 불편했던게 매개변수 정보가 뭔가 도움이 안되는 느낌이다

내가 좀 덜 익숙해서그런지.. 아무튼 각설하고 매개변수 정보가 자동 표기 수정방법을 공유한다


 

# Mac OS 기준

 

❖ IntelliJ 설정 ► 에디터 ► 일반 ► 코드 완성 ► 매개변수 정보 In 부분 " 매개변수 정보 팝업을 다음의 경우에 표시 ~~ " 체크박스 해제

     이후 재시작 할 경우 자동으로 매개변수 정보 팝업이 보이지않음

 

영문 버전의 설정 수정이 필요하신 분은 IntelliJ Help 페이지를 참조

 

 

해당 설정 이후 매개변수 정보가 보시고싶으신분들은 Method 란에서 "Cmd + P" 단축키 사용  하시면 됩니다.

 

 

 

 

 

 

 

객체지향  특징에는 4대 개념이 존재한다

  • 상속성
  • 다형성
  • 캡슐화
  • 추상화

이중 나는 가장 속을 썩이는 개념이 무엇이냐라고 한다면 다형성(Polymorphism)이라고 생각한다

더군다나 한참 Java + 객체지향에 다가가려 할 때 Design Pattern을 접하게 되면서 더욱더 거리가 멀어지는 것만 같다

 

내가 다가가기(친해지기) 어려웠던  Interface  다형성   에 대하여 내가 직접 예제를 작성해 보고 공유하고자 한다.


 

◼︎ 다형성(Polymorphism) 란?  : " 참조 타입에 맞춰서 변한다. "   ( 길게 말하지말죠.. 위키피디아 링크 )    

 

◼︎ Interface 란? :  객체를 생성하지 못하는 Java의 추상화 클래스(?) + 상속 자식 클래스는 부모 메서드 필수 오버라이딩, 구현 필요 

 

Interface 키워드를 배울 때 가장 눈에 뜨였던 건  " 변경, 교체에 용이하다. " 이라는 문구였고 그러면서 머리에 떠오른 건

1. 아? 무조건 오버라이딩을 하니까 자식을 한 200개 만들어서 때에 맞춰 자식 생성자를 만들면 변경 교체에 용이하다는 건가???

2. 이건 상속화에도 똑같이 적용되는 거 아닌가?? 뭐가 문제인 거야?? 왜 멋지게 이름 따로 붙여준 거지..? 다중상속 때문에?? 

 

패턴공부하면서 가장 충격적(혼자서)이었었던 부분에 대하여 혼자 예제를 만들어보고 공부하였던 부분을 공유하고자 한다

 

도식화

 

하늘을 가지고싶었던 바다..

 

 

코드

 

 

public interface Sky {
    void Watching(int count, String name);
    String getOceanName();
}

 

public class BlueSky implements Sky {

    @Override
    public void Watching(int count, String name) {
        System.out.println(name + " 에는 " + getOceanName()+" 을 보려고 " + count + " 명의 사람들이 바닷가를 찾았습니다.");
    }

    @Override
    public String getOceanName() {
        return "파란 하늘";
    }
}

 

public class RedSky implements Sky {

    @Override
    public void Watching(int count, String name) {
        System.out.println(name + " 에는 " + getOceanName()+" 을 보려고 " + count + " 명의 사람들이 바닷가를 찾았습니다.");
    }

    @Override
    public String getOceanName() {
        return "파란 하늘";
    }
}

 

public class Ocean {
    Sky newSky; // 포함 관계

    public void showSky(Sky sky){ // Interface Sky를 매개변수로 받는다.
        if (sky instanceof BlueSky) // sky가 BlueSky일땐 강릉으로
            sky.Watching(10, "강릉");
        else if(sky instanceof RedSky) // sky가 RedSky일땐 목포로
            sky.Watching(100, "목포");

        return;
    }

    public void changeOcean(){
        newSky = new BlueSky();
        newSky.Watching(10000, "뉴욕앞바다");
    }
    
}

 

public class User {
    public static void main(String[] args) {

        // 다형성을 활용한 다양한 하늘 호출해보기
        Ocean ocean = new Ocean();
        ocean.showSky(new BlueSky());
        ocean.showSky(new RedSky());

        // 다형성을 활용한 바다 위치 바꾸기
        ocean.changeOcean();

        //ocean.newSky.Watching(10,"ddd"); // 오류가난다
    }
}

/*  CONSOLE OUTPUT

강릉 에는 파란 하늘 을 보려고 10 명의 사람들이 바닷가를 찾았습니다.
목포 에는 파란 하늘 을 보려고 100 명의 사람들이 바닷가를 찾았습니다.
뉴욕앞바다 에는 파란 하늘 을 보려고 10000 명의 사람들이 바닷가를 찾았습니다.

*/

 

나만의 충격포인트 1. 인터페이스 참조변수만으로도 메서드를 호출할 수 있단 말이야?? 

 

" Sky new = new RedSky() "를 통해서 main 메서드에 운영을 하는 것은 많이들 예제에서 나오는 부분이다

하지만 객체를 생성하지도 않았는데 메서드를 호출해서 틀을 만든다는 것은  직접 예제를 만들어보지 않고서는 느끼지 못하는 부분이었다

 

Ocean 클래스에서 Sky 타입을 가진 sky 변수로 메서드를 호출, 그리고 구현 객체를 가지고 메서드를 호출한다. 

Ocean 클래스에서 개별 Sky를 모두 만들어줄 것인가?

 

결국 각 Sky에 대한 매써드 호출 하는 것이 아닌 하나의 참조변수로 각각의 메서드를 호출한다는 것 

 

나도 다형성으로 한 발걸음은 다가선 게 아닐까..???

 

나만의 충격포인트 2. 포함 관계

 

흔히들  " 상속 " 으로 구현을 하는 것보다는 " 포함 " 관계로 작성을 하는 것이 운영에 도움이 된다고들 한다

근데 왜? 저렇게 해야 할까 라는 생각을 하게 되었는데 막상 예제를 만들어 보려고 하니 각각의 구현된 Sky 메서드들을 호출하려고 하니

포함관계 말고는 생각이 나지 않았다, 또한 상속관계로 구현을 하게된다면 Moon, Sun 과 같은 클래스를 추가한다고 했을때 얼마나 어려울지 다시한번 생각해 볼 수 있었다. 

 

추후 BlackSky 클래스를 구현할지라도 Ocean클래스는 단순히

showSky에서 BlackSky 구현 부분만 추가해 주면 Ocean은 지속해서 사람들이 찾을 것이다  

 

만약 다형성이 없었다면..? 

Sky 별로 (RedSky, BlueSky)  오버로딩으로 메서드를 만들 생각을 하니 벌써 머리가 지끈지끈하다.

 

결론

 

1.  Interface  다형성 은 불편하게 만들고자 쓰이는것이 아니다 (하지만 남발하는건 디버깅에 불편)

2. 다양한 다형성 운영방법이 있으니 자신만의 예제를 만들어 복습 필요

3. 충격 좀 그만 받아도 될 것 같다.

 

 

 

어느새 번개같이 8주차가 지나간다...

 

8주차 리뷰 ( 11.11 ~ 11.17 )

 

▶︎ 과정 (강사님, 과제, 프로젝트..)

  • DB 튜닝 수업 [end]
  • HTML & CSS
  • 자료구조
  • 데이터모델링 시험 (망함)
  • (과제) 데이터모델링

▶︎ 개인 학습

  • 자료구조 , 스프링 온라인 강의 수강 및 실습
  • 데이터 모델링 과제 진행 
남과 비교하지 말자

'일기 > 2024' 카테고리의 다른 글

[백엔드 부트캠프] 10주차 리뷰  (0) 2024.12.02
[백엔드 부트캠프] 9주차  (0) 2024.11.27
[백엔드 부트캠프] 7주차  (0) 2024.11.10
[백엔드 부트캠프] 6주차  (0) 2024.11.10
[백엔드 부트캠프] 5주차  (0) 2024.10.28

+ Recent posts