본문 바로가기
  • 시 쓰는 개발자

전체 글176

개발 마인드 약간의 뇌피셜과 들은 내용들을 정리해두고 있습니다. 서비스의 확장을(AWS 등) 너무 고려한 나머지... 유저가 무엇을 좋아하는지, 어떻게 해야 유저가 편해지는지를 생각하지 못하는 경우가 많다. 기능을 만들고 유저 생각이 먼저다. 확장은 나중에 행복한 고민으로 남겨둔다. 개발자가 불편해야 사용자가 편리하다. 로직이 복잡하다고 꼼수부리면 서비스가 망한다. 2024. 3. 16.
#28 모순 – 2024.03.16. 당신에게 사랑을 배웠다. 밖에서 사랑을 전하고 든든한 나무를 자처하며 착한 사람을 표방해왔다. 집에 돌아와 역겨운 감정이 한 번에 밀려와 거울을 볼 수도 없는 어두운 방 안에 우두커니 앉아있다. 답답한 마음에 뛰쳐나가 소리라도 질러보지만 깊숙이 박힌 마음을 스스로는 떨칠 수 없다. 더 이상 착한 사람을 흉내낼 수 없다. 그저 집안에 박혀 혼자, 아무도 몰래 음유시인을 흉내내며 허망한 말들만 의미없이 읇조릴 뿐이다. // 착한사람이 되지 말고 좋은사람이 되라는 누군가의 말씀이 떠오릅니다. 사랑을 배울수록 그동안 자라면서 들었던 말씀들이 생각나고, 한없이 부끄러워집니다. 사랑을 속삭이며 죄책감에 몸부림칩니다. 2024. 3. 16.
코테 문법정리 (4) - 딕셔너리{ } , 집합{ } 딕셔너리 key : value 쌍으로 구성되는 자료형이다. 순서가 없기 때문에 인덱싱 불가능. key에는 불변 데이터만 사용되지만, value에는 가변 데이터도 사용될 수 있다. 딕셔너리는 내부적으로 "해시 테이블"을 사용해서 검색 및 수정에 O(1)만 걸린다. 가변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형) 딕셔너리 메소드 keys() : key 데이터만 뽑아서 리스트로 이용할 때 사용 values() : value 데이터만 뽑아서 리스트로 이용할 때 사용 items() : key, value 한쌍을 리스트로 이용할 때 사용 https://100won-developer.tistory.com/entry/dictionary%EC%97%90%EC%84%9C-key-.. 2024. 3. 16.
코테 문법정리 (3) - 문자열 " " , 튜플 ( ) 문자열 파이썬의 문자열은 내부적으로 리스트처럼 처리된다. 따라서 인덱싱, 슬라이싱이 가능하다. 불변 객체이다. 불변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형) 문자열 초기화 큰/작은 따옴표를 이용하여 문자열을 초기화 한다. 다만 큰따옴표로 감싸면 내부의 작은 따옴표는 그대로 표기되고, 작은 따옴표로 감싸면 내부의 큰 따옴표가 그대로 표기된다. 따옴표 표시하기 백슬래시를 이용한다. \" 라고 표시하면 따옴표 자체를 프린트할 수 있다. str1 = "hello" str2 = "hi kwang's mom~" # hi kwang's mom~ str3 = "\"hello\"" # "hello" 문자열 연산 str1 + str2 : 두 문자열을 더하기 기호를 이용해 더한다.. 2024. 3. 16.
코테 문법정리 (2) - 리스트 [ ] ★★★ 자료형은 잘 알아두어야 한다. 자료형에 따라 쓰는 함수도 다르고 처리 방식도 달라지니 조심하자. 리스트 ★★★내부적으로 배열이다.가변 객체이다. (가변 : 리스트, 셋, 딕셔너리 / 불변 : 문자열, 튜플, 수 자료형)연결리스트라서 append(), remove() 등 사용 가능배열 혹은 테이블이라고 부르기도 함.리스트 초기화 방법a = [1,2,3,4,5] # 직접 값을 넣어서 초기화할 수 있다.a = list() # 빈 리스트 만들기 (1)a = [] # 빈 리스트 만들기 (2) TIP - 모든 값 0으로 초기화 하기n = 5a = [0]*n # [0,0,0,0,0]이런식으로 크기가 N이고, 모든 값이 0인 1차원 리스트를 초기화 할 수 있다. 리스트 인덱싱인덱스에 -1을 넣으면 맨 뒤에 값을 가져올.. 2024. 3. 15.
코테 문법정리 (1) - 실수형, 연산자 정수형 대부분의 입출력 형태이다. pass 실수형 제일 조심해야하는 게 바로 실수형이다. 일단 표현 방식부터 알아보자. 1.23 1e9 # 10억 67.22e1 # 672.2 65e-1 # 6.5 우리가 아는 방식 외에도 e나 E를 이용해서 위와같이 표현할 수 있다. 큰 수는 저렇게 문제가 나오기도 하니 알아두자. 부동 소수점 실수를 처리할 때 부동소수점 방식을 이용하기에 0.3 + 0.6은 0.89999999.... 로 저장된다. 보통 정수나 문자열 등으로 입출력을 받기에 이런 것 까지 고려하는 문제는 잘 나오지 않겠지만 알아는 두자. round 함수 - round(실수, 반올림하고자 하는 위치-1) 위 상황처럼 소수점으로 곤란할 때 round함수를 쓸 수 있다. 윗줄에서 말한 반올림하고자 하는 위치-.. 2024. 3. 14.
SOLID 5원칙 좋은 객체 지향 설계의 5가지 원칙 SRP : 단일 책임 원칙(single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 좋은 설계의 기준은 "변경"이다. 변경했을 때 파급이 적으면 SRP를 잘 따른 것. 계층이 잘 나뉘어져 있는 것도 SRP를 잘 .. 2024. 3. 11.
annotation 정리 생성자 관련 annotation - OOOArgsConstructor @RequiredArgsConstructor final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줌. @AllArgsConstructor 모든 필드 값을 파라미터로 받는 생성자를 만들어줌. 파라미터를 다 받아야함. 근데 이렇게 하면 필요한 걸 빠뜨리지 않고 객체를 만들 수는 있겠지만 다 넣어야 해서 오히려 객체 만들기 자체가 어려울 수 있음. @NoArgsConstructor 파라미터 아무것도 없는 기본 생성자. 이게 있어야 jpa가 테이블을 만들어줌. 객체화 하려면 생성자가 있어야하는데, 파라미터를 넘겨줘야만 객체를 만들 수 있는 상황이라면 객체를 쉽게 만들 수가 없고 그렇게 되면 테이블에 넣을 수 없기 때문에,.. 2024. 3. 11.
생성자 왜 쓸까? 생성자 왜 쓸까? 생성자를 왜 쓸까? 생성자를 명시해주지 않아도 컴파일러가 기본 생성자를 자동으로 만들어주고, 값을 초기화할 때도 setter를 쓸 수 있는데 왜 쓸까?? 이런 궁금증이 문득 들어서 정리해본다. 1. 쉬운 초기화 setter로도 당연히 할 수는 있다. 근데 코드만 보더라도 필드값 3개를 초기화해야한다면 생성자는 객체를 만들 때 같이 하고, setter는 3줄이 더 추가되니 생성자를 사용하는 것이 코드도 짧아지고 쉽게 초기화할 수 있다. 2. 직관성 위에서처럼 setter를 써서 3줄로 초기화하기보다, 객체를 만들 때 바로 초기화한다면 직관적이고 보기 편할 것이다. 3. 객체의 유효성 보장 그냥 있어보이게 지은 말인데, 실제 있는 말인지는 모르겠다. 단순히 Person p = new Per.. 2024. 3. 11.