본문 바로가기

전체 글

(51)
[item15] 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트란? 캡슐화가 얼마나 잘 되었는지. 노출되는 API와 실제 구현이 얼마나 잘 분리되었는지. 메시지를 주고 받는 두 컴포넌트가 서로의 내부 동작을 신경쓰지 않는지. 캡슐화를 잘 지켰을 때의 장점 서로의 구현을 몰라도 되기 때문에 병렬로 개발이 가능하며 개발 속도가 빨라진다. 잘 분리되어 있는 컴포넌트는 관리포인트가 작다. 디버깅도 빨리 할 수 있고 다른 컴포넌트로의 교체도 빠르게 할 수 있다. 잘 분리되어 있는 컴포넌트는 최적화도 그 컴포넌트만 하면 되기 때문에 좋다. (다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있다.) 외부 컴포넌트에 종속되지 않기 때문에 재사용성이 높다. 전체 시스템이 완성되지 않아도 개별 컴포넌트를 검증할 수 있기 때문에 큰 시스템을 개발하는 난..
[item13] clone 재정의는 주의해서 진행하라 클래스에서 clone을 재정의 하기 위해서는 해당 클래스에 Cloneable 인터페이스를 상속받아 구현해야 한다. 그런데 clone 메소드는 Cloneable 인터페이스가 아닌 Object에 선언되어 있다. Cloneable 인터페이스에는 아무것도 선언되어 있지 않은 빈 인터페이스이다. 그렇다면 Cloneable 인터페이스의 역할은 무엇일까? Cloneable 인터페이스의 역할 Cloneable 인터페이스는 상속받은 클래스가 복제해도 되는 클래스임을 명시하는 믹스인 인터페이스이다. (단지, ‘clone에 의해 복사할 수 있다’ 라는 표시로서 사용되고 있다.) 믹스인이란 클래스가 본인의 기능 이외에 추가로 구현할 수 있는 자료형으로, 어떤 선택적 기능을 제공한다는 사실을 선언하기 위해 쓰인다. A라는 클래..
[SSAFY/싸피] 8기 전공자 합격 후기 안녕하세요. 싸피 8기 전공자 서울 캠퍼스 합격 후기를 포스팅하려고 합니다. 사실 합격한지는 꽤 됐는데 미루다가 지금 글을 쓰게 되었네요..ㅋㅋ 싸피 준비할 때 다른 분들 후기 글을 보고 많은 도움을 받아서 저도 남겨보려고 합니다. 싸피 관련해서는 대외비이기 때문에 저의 준비과정 위주로 작성하겠습니다. 1. 에세이 저는 에세이에 많은 시간을 쓰지 않았습니다. 일단 분량도 500자 밖에 되지 않아서 쓸 수 있는게 많지 않았습니다. 저는 다른 분들보다 프로젝트 경험이 많은 것이 강점이라고 생각해서 이를 중점적으로 어필하고자 했습니다. 제가 의미있다고 생각 되었던 프로젝트 경험을 몇 개 골라서 이 프로젝트들을 통해 깨달은 점들을 적었고 저의 프로그래밍에 대한 열정을 녹여냈습니다. 그리고 싸피를 통해 어떠한 것..
[Java] println과 StringBuilder 속도 차이 https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net println을 쓰니까 시간이 3280ms로 너무 느려서 StringBuilder로만 바꿔줬더니 시간이 924ms로 엄청나게 단축되었다. 마지막 System.out.println(sb); 문도 BufferedWriter를 써서 변경해주었더니 876ms로 더 단축되는걸 볼 수 있었다. import java.io.BufferedReader; import java.io.BufferedWriter; i..
[Flutter] localhost refused to connect 에러 카카오로그인을 장고로 백엔드를 구현하고 플러터로 프론트를 구현해서 연동시키려는데 에러가 떴다. 에러메시지 localhost refused to connect Flutter 앱 자체에서 로그인을 하지 않고 모바일 웹에서 로그인한 후 결과를 Redirect URI를 통해 앱으로 리턴받기 위해 작성한 url이 문제였다. 에뮬레이터를 실행시켜서 테스트를 진행하려고 했는데 Android emulator는 127.0.0.1을 localhost로 쓰지 않고 10.0.2.2를 쓰기 때문이다. 그래서 플러터에서 url을 "http://127.0.0.1:8000/user/signin/kakao/", 에서 "http://10.0.2.2:8000/user/signin/kakao/",로 변경하고 장고에서도 redirect ur..
[Django] Sqlite를 heroku Postgresql로 변환하기 장고에서는 기본적으로 sqlite를 데이터베이스로 쓰는데 heroku로 배포하면서 postgresql을 사용하게 되었습니다. (헤로쿠에서는 sqlite를 사용할 수 없는 것 같더라구요..ㅜㅜ) 그래서 로컬 sqlite에 있는 데이터들을 postgresql로 옮겨주고 연동을 진행하게 되었습니다. 시작하기 전에 postgresql과 pgadmin을 깔아줍니다. postgresql은 pgAdmin이라는 도구를 이용해서 데이터베이스를 쉽게 관리한다고 합니다. 1. fixtures 폴더 만들기 먼저 장고에서 앱 하위에 fixtures 폴더를 만듭니다. 2. 로컬에 있는 데이터를 dump 파일로 만들기 python manage.py dumpdata --exclude=contenttypes --exclude=auth..
[Flutter] Container 위젯을 가운데로 정렬하기 아래처럼 컨테이너를 가운데로 정렬하려고 crossAxisAlignment: CrossAxisAlignment.center 을 썼는데도 아무런 반응이 없었다. body: Column(children: [ crossAxisAlignment: CrossAxisAlignment.center, Container( width: 300, height: 300, margin: EdgeInsets.only(top: 20.0), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.0), border: Border.all(color: Colors.grey, width: 1)), container를 가운데로 정렬하려면 Ce..
[Django] heroku 서버 배포 엄청난 에러들과 함께 6시간만에 서버 배포 성공.. heroku 서버 배포를 처음 해보다보니 어이없는 삽질을 많이 했다. 전반적인 과정은 이 링크를 참고하였다. https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Deployment Django 튜토리얼 파트 11: Django 웹사이트 공개하기 - Web 개발 학습하기 | MDN 당신은 이제 놀라운 LocalLibrary 웹사이트를 (테스트도 마치고) 만들었으니, 도서관 스태프나 회원들이 인터넷을 통해 이용할 수 있도록 공개된 웹 서버에 설치하길 원할 것이다. 이번 장에서는 developer.mozilla.org 에러메시지 django at=error code=H10 desc="App cras..