[정처기-왕두목쌤] 소스 코드 최적화

이기적 영진닷컴
21 팔로워
1 비디오 조회수·2024. 5. 24.
이 동영상은 [이기적 정보처리기사 필기 기본서] 도서 내용을 바탕으로 제작되었습니다.
🔹 도서 자세히 보기 : https://www.yes24.com/Product/Goods/1...
🔹 이 동영상이 포함된 재생목록 :
• 정보처리기사 필기(왕두목쌤)
🔹 모르는 문제? [이기적 스터디 카페] 질문하기 : https://cafe.naver.com/yjbooks
🔹 이기적 홈페이지 : https://license.youngjin.com
🔹 인스타그램 :
/ license.youngjin_official
자 이번에는 소스코드 최적화음 그래서
여기 나오는 용어들은 클린 코드나
외계인 코드 이런 아이들이에요
소스코드 최적화라고 하는 거는 말
그대로 소스코드를 최적화해 가지고
효과적인 효율적인 소프트웨어를
개발한다는게 기본 개념이고 여기에서
이제 클린 코드라고 하는 애가
나오는데이 클린 코드라고 하는 거는
뭐야 누구가 봐도이 코드는 다 이해가
돼 스파게티 코드는 꼬여 있는 거죠
그래서 얘네를 좋은 코드와 코드
이렇게 두 가지로 구분 할 수가
있겠고 문제는 뭐가 나오냐면 크린
코드가 무엇이냐에 대한 거예요 나쁜
코드는 어때요 개발자가 로직을
이해하기 어렵게 작성을 해서 괜히
꼬아놓은 거지 변수 매 소스에 대한
명칭을 알 수 없어요 문서화가 안 돼
있거나 만약에 뭐 변수 이름을 엉뚱한
걸로 했다거나 동일한 처리 로직이
중복되게 작성된 코드나 이런 걸 다른
말로 뭐라고 한다 스파게티 코드라고
한다 자 클린 코드는 깔끔하게 정리된
코드를 의미하고 중보 코드 제거로
어플리케이션의 설계가 개선이 되고
가독성이 높아 가지고 어플리케이션의
기능에 이해가 쉽고 버그가 찾기가
쉽고요 프로그램 속도가 빨라져요 자
클린코드 작성 원칙 요것도 출제된 적
있어요 가독성 딱 봤을 때 이게 뭔지
알 수 있어야 돼요 단순해야 되겠고요
의존성은 배제돼야 되겠죠 자 중복성
최소성 추상화 이렇게 구성이 돼 있다
유형으로 보면 조기조 뭐 보기 좋은
배치 작은 함수 분석 가능한 제어
흐름 오류 처리 단결한 주석 의미
있는 이름 런 것들이 되겠죠 코드의
간결성 유지 지침으로는 공백을
이용해서 실행문 주석을 명확히 구분
하고 복잡한 논리식과 산수 식은
괄호와 들여쓰기를 이용해서 요걸
이용해서 명확하게 구분 해서 각각
단위 실행 코드를 구분 잘 보일 수
있도록 한다 빈줄을 사용을 해 가지고
선언부와 구연부를 구분하기
의존성 배제 중복성 최소화 추상화
이렇게 되는데 가독성은 이해하기 쉬운
코드를 이야기하는 거예요 또는
단순성이라는 거는 클래스 메소스
함수를 최소 단위로 분해해서 한 번에
한 가지 기능만 그다음에 의존성
배제는 다른 모듈에 미치는 영향을
최소화하는 거 중복성 최소화는 중복된
코드는 삭제해서 공통된 코드로
사용하고요 추상화는 상위 클래스
메소스 함수에서 간략하게
어플리케이션의 특성을 나타내고 상세한
내용은 하위 클래스에서
얘네를 표현한다 이렇게 구현을 하면
우리가 쉽게 표현할 수 있다 자
외계인 코드 딱 이름만 보도 알 것
같죠 자 오래되거나 참고 분원 또는
개발자가 없어서 유지보수가 어려운
프로그램을 뭐라고 한다 외계인
코드라고 한다 그러면 소스코드 최적화
유형에는 어떤게 있냐 클래스를
분할해서 배치한다 좋은 이름을
사용해요 변수나 함수 이름이 네이밍
룰을 이용을 해서 기억하기 좋고
바람하고 딱 봐도 얘가 무 의미하는지
즉 예를 들면 면은 이름을 받는다
그러면 뭐 nm 렇게 표현한다는 뭐
그냥 아예 자연어로 네이라 표현한다는
뭐 이런 식인 거죠 딱 봐도 뭔지
아는음 코딩 형식을 준수해 줘야 돼요
개념적 유사성이 높은 종속 함수를
사용해서 논리적인 코드를 라인별로
구분 가독성을 높이고 호출하는 함수는
앞쪽에 배치하고 호출되는 함수는
뒤쪽에 배치해서 지역 변수는 각 함수
맨 처음에 선언을
합니다 또 클래스 간의 의존성을
느슨하게 해가지고 인터페이스 클래스를
이용해서 수성화 된 자료 구조에 매
소스를 구현하고 주석을 적절하게
사용을 합니다 자 그러면 이런
소스코드 품질을 분석하는 도구들도
있는데 그런 것들은 어느 것들이
있느냐 우선은 소스코드의 코딩
스타일이나 코드에 설정된 코딩 표준
코드의 복잡도 코드에 존재하는 메모리
누수 쓰레드 결함 요런 것들을
자동으로 분석해 주는 도구가 있고
얘도 마찬가지로 정적 분석과 동적
분석이 있어요 정적이라고 하는 거는
코드 를 직접 들여다보는 것이고
동적이고 하는 건 직접 실행해 보는
거죠 자 정적 분석 도구라는 것은
잠재적인 실행 오류와 코딩 표준의
위배 사항 등에 보안 취약점을
검출하고 검출된 약점을 수정 보완해서
소프트웨어 안정성을 강화하고 향후
발생하는 오류 수정 비용을 줄여준다
소스코드에서 코딩의 복잡도 모델의
의존성 불일치성 등을 우리가 분석해
낸다 정적 분석 기법에는 소스코드
검증이나 코드 리뷰 리버스 엔
엔지니어링을 통해 가지고 진행을 한다
소스코드 검증은 검증 가이드라인을
통해서 보안 조치를 하고요 코드
리뷰는 개발자가 작성하고 다른
개발자가 어떤 정해진 방법을 통해서
검토하는 방법이죠 먼저 개발한 사람이
약간 표현 좀 mm5 하다거나 할 때
미리 야 이건 요렇게 좀 해주면
좋겠어 라든지 미리 정의를 해주면
차후에 같은 문제를 발생하지 않겠죠
리버스 엔지니어링은 시스템의 기술적
원리를 구조적 분석을 통해서 거꾸로음
이게 역학이 아아 예 요렇게 되는
것이고요 소스코드 분석 도구에는
대표적인 도구들이 몇 가지가 있어요
pmd고 해서 과목에서도 봤었죠
자바나 펙스 xml 등의 다양한
언어에서 사용이 가능하고 코드 스타일
검사나 복잡도 분석 보안 분석 등의
기능을
제고한다 cpp 체크는 C 아아
그래서 CN 시분 언어에서 사용
가능한다 메모리 누수나 잘못된 포인터
사용 배열 경계 검사 때 많이 쓰이고
쏘나 큐브는 코드 커버리지 코드
스타일 검사 보 분석 등을 제공한다
체크 스타일은 자바에서 사용할 수
있는 코드 스타일 검사 도구다 코드
스타일 규칙을 쉽게 수정하고 추가할
수 있으며 자동화된 코드 리뷰를
제공한다 CCM 이것도 C 시작하니까
시나시 언어에서 사용되는 복잡도 분석
도구다 코베 2라는 자바에서 사용할
수 있는 코드 커버리지 분석 도구다
그랬는데 각각 매칭다는 정적 분석
도구의 종류를 기억하시면 되는 거예요
자동적 분석 도구 같은 경우는
소프트웨어 코드보다는 과정에서 다양한
입출력 데이터의 변화 및 사용자 상호
작용에 따른 변화를 점검하는
기법이에요
대표적인 동적 분석 기법에는
디버깅이나 스트레 테스트 모이 해킹
리버스 엔지니어링을 통해 가지고
우리가 확인을 해 볼 수가 있다라는
것이고 그래서 도구 종류 중에 동적
도구와 정적 도구를
구분하기 계시면 되겠죠 발 그라인드
gdb J 프로파일러 비주얼 vm
아파츠 제이미터 러 어체 이런
아이들이 동적 분석 도구고 얘네는
우리 통합 구연부 계속 받았던 거
같은데요 그냥 종류 정도만 기억하시면
되겠습니다 자 정적 분석과 동적
분석의 도구 비교를 해보면 우선은
정적 분석 도구는 코드를 실행하지
않아요 얘는 코드를 실행해요 얘는
소스 코드 자체를 보지만 얘는 실행을
하다가 발생하는 오류를 봐요 얘는
소스 코드를 보지만 실행중인 코드를
봐요 검사 시점은 컴일 이후 빌드
이전해 하지만 얘는 실행 디버깅 요때
우리가 보는 거고 오류 검출은 코드
스타일 복잡도 보안 취약점 요런 걸
보는데 여기에서는 메모리 오류 성능
문제 보안 지역점 즉 실적 직접
실행해 가지고 발생하는 문제점들을
확인하는 거죠 사용 예시는 코드 품질
검사 보안 검사 버그 검사 여기서는
메모리에 관련된 부분이니까 메모리
누수 검사 성능 분석 디버깅 수행하는
단계는 소스코드 작성및 컴파일 하고요
정적 분석 도구로 소스코드 분석하고
결과 리포팅 합니다 동적 분석
도구에서는 소스코드 작성및 컴파일
동적 분석 도구로 실행 중인 코드
분석 결과 리포트 작성 이런 절차를
통해 가지고 우리가 작업을 하게 된다
그래서 우리 소스코드 최적화에서는
여러분들이 기억하셔야 될게 좋은
코드가 뭐였죠 클린 코드고 복잡한
거를 스파게티 코드라고 이야기를 한다
그랬죠 그거 기억하시고요 소스코드
최적화 도구에는 정적 도구와 동적
도구가 있었다 정적 도구는 를
분석하는 거고 동적 분석은 직접
실행하는 것이다 이렇게 정의를 하고
계시면 될 것
같습니다 그래서 여기까지 해가지고
다섯 번째 챕터인 어플리케이션 성능
개선까지 우리가
살펴봤습니다 간단히 정리하고 실제로
교재에 출제됐던 내용들이 표시가 되
있기 때문에 출제됐던 내용들 위주로
학습하시면 되지 굳이 이렇게 막 출제
안 됐던 아이들 가지고 집중하시면 안
됩니다 그리고 바로 뒤에 이제 확인
문제가 있는데 그 확인 문제와 매칭해
가시면서 아 문제가 이런 스타일로
나오는 나까지도 여러분들이 확인을
해주셔야 정작 현실감 있는 그런
학습이 된다 이렇게 봐주시면
좋겠습니다 감사합니다
