게시글
블로그
전체 42024. 08. 14.
8
[2024 인프콘] 올해 들어 가장 잘한 일 인프콘 서포트즈 하기!
2024 INFCON 서포터즈 후기 및 비하인드 스토리 1.인프런 워밍업 클럽 스터디https://www.inflearn.com/course/offline/inflearn-warmup-club-study-0인프런 워밍업 클럽은 BE와 FE부분에 대해서 코치님의 지식공유를 토대로 여러 스터디원들과 주마다 성장하며작은 과제와 사이드프로젝트까지 진행하며 빠른 성장을 도와준 인프런 프로그램이다 난 여기에 BE파트로 진행해워밍업 클럽을 이수 했고 참여자들을 대상으로 인프런팀에서 감사하게도 인프콘 서포터즈 참여기회를 주셨다 2.인프콘 서포터즈 OT 이렇게 참여 전 온라인 OT를 통해 인프런팀에서 친절하게 설명을 해주시면서 당일 업무,역할 분배등을 진행했습니다 인프콘 진행!저희 서포터즈분들은 아침 8시에 모여서 사전교육및 오늘 활동에 대한 리마인드를 듣고 A팀 B팀 나뉘어 인프콘을 진행했습니다 저는 B팀으로 오전에는 부스체험+세션참여 위주로 인프콘을 즐겼습니다 인프콘에는 datadog, 무신사, jetbrains 등 많은 기업과 단체에서 부스를 운영해주셔서 IT관련 커뮤니티를 생성하기에 좋은 기회라고 생각했습니다이렇게 스템프 투어를 통해 인프런에서 준비한 많은 프로그램과 행사에 참여하다인프콘의 메인 세션에 참여했습니다사실 저는 아직 학부생과정이라 실무내용을 들으면서 100%받아드리고 이해는 하지 못했지만 새로운 인사이트를 경험하고 BE과정에서뿐만아니라PM,디자인 다양한 분야의 이야기를 들을 수 있어 값진 경험이였던 것 같습니다저희 B팀 서포터즈들은 이렇게 세션에 오시는분들 인원체크 및 세션종료후 지식공유자님들과의 QNA를 위해 장소 이동안내 역할들을 수행했습니다 중요업무는 아니더라도 인프콘 행사를 운영하는일원중 한사람이라는 느낌을 받을 수 있어서 좋았습니다이렇게 점심시간에는 도시락과 커피와 중간휴식시간 마다 간식거리들도 제공해주시고 저희 서포터즈분들을 많이 인프런팀에서 배려해주신다는 느낌을 받았습니다 인프콘에 이렇게 세션 외에 네트워킹 파티를 통해 저와 비슷한 관심사를 가지고있는 분들을 만나 다양한 이야기와 새로운 지식들을 알 수 있어서 세션 외 프로그램도 매우 유용하다고 생각했습니다. 이렇게 인프런측에서 철저하게 준비해주신 인프콘행사에 서포터로 활동하게 되니 따로 인프콘에서 제공하는 굿즈를 받을 시간이 없어서 아쉬워하고 있었는데인프런에 자미님께서 굿즈 부스에서 저희를 기억해주시고 따로 메일을 주셨습니다ㅜㅜ어째서 인프런에는 이렇게 좋으신 분들만 가득한건가요...!!! 덕분에 인프콘 다녀오고 나서 하루하루가 따뜻해지는 기분입니다 이렇게 마무리까지 감동이 가득한 2024 인프콘 서포터즈 후기였습니다 자미님 뿐만 아니라 제트님 저희 서포터즈분들을 챙겨주신 태리님 등 많은 인프런 관계자분들에게 감사한 2024 인프콘이였습니다 다음에도 비슷한 기회가 있으면 꼭 다시 참여하고싶습니다
커리어 · 자기계발 기타
・
인프콘
・
인프랩
・
백엔드
・
PM
2024. 05. 03.
0
인프런 워밍업 클럽 3일차 과
Q1- 람다식의 등장이유Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어있다. 그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다. 그렇기 때문에 우리는 Stream API를 정확히 이해하기 위해 람다식과 함수형 인터페이스에 대해 알고 있는것이 좋다. 익명함수(Anonymous Function)란 함수의 이름이 없는 함수로, 익명함수들은 모두 일급 객체이다. 일급 객체인 함수는 변수처럼 사용가능하며 매개 변수로 전달이 가능하는 등의 특징을 가지고 있다. 기존의 방식에서는 함수를 선언할 때 다음과 같이 선언하였다. // 기존의 방식 반환티입 메소드명 (매개변수, ...) { 실행문 } // 예시 public String hello() { return "Hello World!"; } 하지만 람다 방식으로는 위와 같이 메소드 명이 불필요하며, 다음과 같이 괄호() 와 화살표-> 를 이용해 함수를 선언하게 된다. // 람다 방식 (매개변수, ... ) -> { 실행문 ... } // 예시 () -> "Hello World!"; 이렇게 람다식이 등장하게 된 이유는 불필요한 코드를 줄이고, 가독성을 높이기 위함이다. 그렇기 때문에 함수형 인터페이스의 인스턴스를 생성하여 함수를 변수처럼 선언하는 람다식에서는 메소드의 이름이 불필요하다고 여겨져서 이를 사용하지 않는다. 대신 컴파일러가 문맥을 살펴 타입을 추론한다. 또한 람다식으로 선언된 함수는 1급 객체이기 때문에 Stream API의 매개변수로 전달이 가능해진다. 람다식(Lambda Expression) 의 특징 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다. 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다. 람다식(Lambda Expression) 의 장점 코드를 간결하게 만들 수 있다. 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다. 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다. 병렬프로그래밍이 용이하다. 람다식(Lambda Expression) 의 단점 람다를 사용하면서 만든 무명함수는 재사용이 불가능하다. 디버깅이 어렵다. 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다. 재귀로 만들경우에 부적합하다. ☞ 람다라고 무조건 좋은건 아니다. 상황에 맞게 적절하게 사용하자:) Q2 람다식과 익명 클래스의 관계 익명클래스가 필요한 상황1. 프로그램 내에서 일시적으로(단발성으로) 한번만 사용되어야 하는 객체일 경우-> UI 이벤트처리, 스레드 객체 등 (단발성 이벤트 처리)2. 재사용성이 없고, 확장성을 활용하는 것이 유지보수에서 더 불리할 때-> 비즈니스 로직이 정말 재각각이며, 재사용성이 전혀없어 매번 클래스를 생성해야하는 비용이 더 많을 때정리하자면 클래스를 별도로 만들 필요없이 코드에서 익명객체를 생성/정의하여 단 한번의 쓰임을 다하고 소멸한다.그래서 만일 어느 메소드에서 부모 클래스의 자원을 상속받아 재정의하여 사용할 자식 클래스가 한번만 사용되고 버려질 자료형이면, 굳이 상단에 클래스를 정의하기보다는, 지역 변수처럼 익명 클래스로 정의하고 스택이 끝나면 삭제되도록 하는 것이 유지보수면에서나 프로그램 메모리면에서나 이점을 얻을 수 있다. 다만 주의해야 할 점이 있다.기존의 부모 클래스를 상속한 자식 클래스에서는 부모 클래스의 메서드를 재정의 할뿐만 아니라 새로운 메소드를 만들어 사용할수 도 있다는 점은 다들 알고 있을 것이다.하지만 익명 클래스 방식으로 선언한다면 오버라이딩 한 메소드 사용만 가능하고, 새로 정의한 메소드는 외부에서 사용이 불가능 하다.이런 익명클래스중 익명클래스 중에서 한 가지 메소드만 구현하는 경우, 람다식으로 변경할 수 있다.둘 다 함수적 프로그래밍을 구현하는 방식이지만 람다식는 앞서 말했듯이 익명 클래스의 단점을 보완하기 위해 등장했음. 람다식은 익명 클래스보다 간결하고, 가독성이 높으며, 함수적 프로그래밍 적용이 쉽고, 스코프 개념으로 감싸고 있는 변수를 직접 참조가 가능하며 마지막으로 직렬화도 가능함. 출처: https://itkjspo56.tistory.com/289 [로춘남의 IT이야기:티스토리]
백엔드
2024. 05. 01.
0
인프런 워밍업 클럽 1기 백엔드 과정 두 번째 과제!
과제2: API 개발 실습1. 두 수의 연산 결과 반환API/컨트롤러 @RestController public class PracticeController { @GetMapping("/api/v1/calc") public CalculateResponse getCaluclateResult(@RequestParam int num1, @RequestParam int num2) { CalculateResponse response = new CalculateResponse(num1,num2); return response; } } /DTO 클래스 public class CalculateResponse { private int add; private int minus; private int multiply; public CalculateResponse(num1,num2) { this.add = num1+num2; this.minus = num1-num2; this.multiply = num1*num2; } public int getAdd() { return add; } public int getMinus() { return minus; } public int getMultiply() { return multiply; } }2. 요일 반환 API//컨트롤러 package com.group.libraryapp.controller.date; import com.group.libraryapp.dto.date.response.DateResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.time.format.TextStyle; import java.util.Date; import java.util.Locale; @RestController public class DateController { @GetMapping("v1/day") public DateResponse getToday(@RequestParam String date) { LocalDate day = LocalDate.of(date); return new DateResponse(day.getDisplayName(TextStyle.SHORT, Locale.US)); } } // Dto package com.group.libraryapp.dto.date.response; public class DateResponse { private String dayOfTheWeek; public DateResponse(String dayOfTheWeek) { this.dayOfTheWeek = dayOfTheWeek; } public String getDayOfTheWeek() { return dayOfTheWeek; } }3.입력한 수들의 합 반환//컨트롤러 @RestController public class PracticeController { @PostMapping("/api/v1/sum") public Integer sumNumbers(@RequestBody SumRequest request) { int sum = 0; for (Integer number : request.getNumbers()) { sum += number; } return sum; } } //DTO public class SumRequest { private List numbers = new ArrayList(); public List getNumbers() { return numbers; } } 참고블로그: https://hianna.tistory.com/610
백엔드
2024. 04. 29.
0
인프런 워밍업 클럽 1기 BE 1일차 과제
어노테이션을 사용하는 이유 (효과) 는 무엇일까?우리는 프로그래밍을 진행하면서 주석을 자주 사용한다 주석을 사용하는 이유는 개발의 과정에서 더 직관적이고 코드를 이해하기 쉽게 하고, 다른 사람에게 내 코드를 보일 때 에도 쉽게 이해할 수 있게 정보를 제공 하기 위해 제공한다 이와 마찬가지로 어노테이션도 비슷한 기능을 한다고 볼 수 있다 다만 주석은 타 프로그래머나 사람에게 정보를 제공하는 것 이라면 어노테이션은 특정 코드에 대해 프로그램에 추가 정보를 전달해 프로그램을 유용하게 개발 할 수 있다어노테이션의 활용런타임 과정에서 특정 기능을 실행하게 해준다프로그램을 빌드할 때 코드를 자동으로 생성할 수 있게 해준다컴파일러에게 문법 에러를 체크하게 정보를 제공한다어노테이션의 종류표준 어노테이션:자바에서 기본적으로 제공하는 어노테이션@Override컴파일러에게 오버라딩하는 메소드라는 것을 알린다. @Deprecated앞으로 사용하지 않을 것을 권장하는 대상에 붙인다. @SuppressWarnings컴파일러의 특정 경고 메시지가 나타나지 않게 해 준다. @SafeVarargs제네릭 타입의 가변 인자에 사용한다.메타 어노테이션: 어노테이션을 위한 어노테이션으로, 어노테이션을 정의할 때 사용된다@Target어노테이션이 적용 가능한 대상을 지정한다.@Retention어노테이션이 유지되는 기간을 지정한다.나만의 어노테이션은 어떻게 만들 수 있을까?1. 어노테이션 생성 어노테이션은 다음과 같이 인터페이스 앞에 @를 붙여서 생성할 수 있다. public @interface RestControllerWithSwagger { } 2. 메타 어노테이션 추가 메타어노테이션중 그 중에서 필요한 것들을 적용하면 된다. @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Target(ElementType.TYPE) public @interface RestControllerWithSwagger { } 3. 적용할 어노테이션 추가 추가적으로 적용할 어노테이션이 있으면 추가해준다. 우리는 @Api와 @RestController라는 어노테이션을 공통으로 묶을 것이므로 이를 추가해준다. @Api @RestController @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Target(ElementType.TYPE) public @interface RestControllerWithSwagger { String name() default "RestController"; String value(); } 4. 변수 추가 어노테이션에 값을 부여하기를 원한다면 변수를 다음과 같이 선언해줄 수 있다. @Api @RestController @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Target(ElementType.TYPE) public @interface RestControllerWithSwagger { String name() default "RestController"; String value(); } 5. 적용하기 위와 같은 과정으로 어노테이션을 생성하였으면 이제 다음과 같이 적용할 수 있다. @RestControllerWithSwagger(value = "RestMemberController", name = "RestMemberController") @RequiredArgsConstructor @Test1 @RequestMapping("/member") public class RestMemberController { private final MemberService memberService; @ApiOperation("멤버 목록 반환") @GetMapping("/list") public ResponseEntity upload() { return ResponseEntity.ok(memberService.getList()); } }출처: https://mangkyu.tistory.com/130 [MangKyu's Diary:티스토리]참초:GPT,https://steady-coding.tistory.com/614
백엔드