<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>duruej</title>
    <link>https://attestorr.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 3 Sep 2026 19:57:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>duruej</managingEditor>
    <item>
      <title>Linux CLI Cheat Sheet</title>
      <link>https://attestorr.tistory.com/103</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;시스템 관리&lt;/h3&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;# 시스템 업데이트
sudo apt update            # 패키지 목록 업데이트
sudo apt upgrade           # 설치된 패키지 업그레이드
sudo apt full-upgrade      # 의존성을 고려한 완전한 업그레이드

# 패키지 관리
sudo apt install [패키지명]   # 패키지 설치
sudo apt remove [패키지명]    # 패키지 제거
sudo apt autoremove         # 불필요한 패키지 자동 제거
apt search [검색어]          # 패키지 검색

# 시스템 정보
uname -a                    # 커널 정보 표시
lsb_release -a              # Ubuntu 버전 정보
free -m                     # 메모리 사용량 확인
df -h                       # 디스크 사용량 확인
top -bn1                    # CPU 사용량 확인

# 프로세스 관리
ps aux                      # 실행 중인 프로세스 목록
top                         # 시스템 및 프로세스 모니터링
kill [PID]                  # 프로세스 종료
killall [프로세스명]           # 특정 이름의 모든 프로세스 종료

# 서비스 관리
sudo systemctl start [서비스명]   # 서비스 시작
sudo systemctl stop [서비스명]    # 서비스 중지
sudo systemctl restart [서비스명] # 서비스 재시작
sudo systemctl status [서비스명]  # 서비스 상태 확인&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 및 디렉토리 관리&lt;/h3&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;ls                          # 디렉토리 내용 나열
ls -l                       # 자세한 목록 보기
ls -a                       # 숨김 파일 포함 모든 파일 보기
cd [디렉토리]                 # 디렉토리 변경
pwd                         # 현재 작업 디렉토리 표시
mkdir [디렉토리명]             # 디렉토리 생성
rmdir [디렉토리명]             # 빈 디렉토리 삭제
rm [파일명]                   # 파일 삭제
rm -r [디렉토리명]             # 디렉토리와 그 내용 삭제
cp [원본] [대상]              # 파일 또는 디렉토리 복사
mv [원본] [대상]              # 파일 또는 디렉토리 이동/이름변경
touch [파일명]               # 빈 파일 생성 또는 타임스탬프 업데이트
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 내용 보기 및 편집&lt;/h3&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;cat [파일명]                  # 파일 내용 출력
less [파일명]                 # 파일 내용을 페이지 단위로 보기
head [파일명]                 # 파일의 처음 10줄 보기
tail [파일명]                 # 파일의 마지막 10줄 보기
nano [파일명]                 # nano 텍스트 에디터로 파일 열기
vim [파일명]                  # vim 텍스트 에디터로 파일 열기
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;네트워크&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;ifconfig                    # 네트워크 인터페이스 정보 표시
ip addr show                # IP 주소 정보 표시
netstat -tuln               # 열린 포트 확인
ping [호스트]                 # 호스트와의 연결 테스트
ssh [사용자]@[호스트]          # SSH 원격 접속
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;압축 및 아카이브&lt;/h3&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;tar -cvf [파일명.tar] [디렉토리] # tar 아카이브 생성
tar -xvf [파일명.tar]          # tar 아카이브 추출
gzip [파일명]                  # gzip으로 압축
gunzip [파일명.gz]             # gzip 압축 해제
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;검색&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;find [경로] -name [파일명]     # 파일 검색
grep [패턴] [파일명]           # 파일 내용에서 패턴 검색
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt; &amp;gt;&amp;gt; 추가
 &amp;gt; 덮어쓰기&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;계정 정보 보기&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;whoami
id
users
groups&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리눅스 명령어 도움말 보기&lt;/h3&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;man [명령어]                   # 도움말보기
[명령어] --help                # 간단 도움말 보기
whereis [명령어]               # 도움말 페이지 찾기      &lt;/code&gt;&lt;/pre&gt;</description>
      <category>리눅스</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/103</guid>
      <comments>https://attestorr.tistory.com/103#entry103comment</comments>
      <pubDate>Tue, 11 Mar 2025 08:52:24 +0900</pubDate>
    </item>
    <item>
      <title>자바 문법 별 그리기 다중 반복</title>
      <link>https://attestorr.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/print-stars-in-square?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.codetree.ai/missions/4/problems/print-stars-in-square?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713846362594&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/4/problems/print-stars-in-square?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9ygP8/hyVVxfgvWe/3MWgx5Ip5r90qXkByxiR4K/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508,https://scrap.kakaocdn.net/dn/bcsRQF/hyVVAJOT6v/vGjKtQy7BWvXqyZN17aLzk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/print-stars-in-square?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/4/problems/print-stars-in-square?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9ygP8/hyVVxfgvWe/3MWgx5Ip5r90qXkByxiR4K/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508,https://scrap.kakaocdn.net/dn/bcsRQF/hyVVAJOT6v/vGjKtQy7BWvXqyZN17aLzk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 공부해두면 어려운 개념은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴공 1학년 시절 처음으로 당황시킨 문제로 기억한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 코드를 통으로 외웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 코딩테스트를 하며 그 개념이 이해가 가 정리해두고자 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1713846298036&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;11111
11111
11111

위의 코드를 출력하는 방법으로 반복문을 세 번 사용하는 방법이 있다.

for(int i=0;i&amp;lt;5;i++){
	System.out.print(1);
}
System.out.println();
for(int i=0;i&amp;lt;5;i++){
	System.out.print(1);
}
System.out.println();
for(int i=0;i&amp;lt;5;i++){
	System.out.print(1);
}
System.out.println();

중첩 반복문을 이용하여 위 반복문을 세 번 반복하면 된다.

for(int j=0; j&amp;lt;3; j++){
	for(int i=0;i&amp;lt;5;i++){
	System.out.print(1);
	}
	System.out.println();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/102</guid>
      <comments>https://attestorr.tistory.com/102#entry102comment</comments>
      <pubDate>Tue, 23 Apr 2024 13:26:19 +0900</pubDate>
    </item>
    <item>
      <title>자바 문법 1까지 나누기</title>
      <link>https://attestorr.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/divide-by-1?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.codetree.ai/missions/4/problems/divide-by-1?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713239011571&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/4/problems/divide-by-1?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S0Yq3/hyVPW8xZO9/LQM4yhAlKyVAZo6Oazrvbk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/divide-by-1?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/4/problems/divide-by-1?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S0Yq3/hyVPW8xZO9/LQM4yhAlKyVAZo6Oazrvbk/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1713239650028&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=n;
        int i;
        for(i=1; i&amp;lt;=n; i++){
            m=m/(int)i;
            if(m&amp;lt;=1){
                break;
            }    
        }System.out.print(i);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 키는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) '나누었을 때 1 이하가 되는 순간 까지' 라는 조건을 잘 이해하고 어떻게 표현하는가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) '단, 나눗셈 진행시 각 나눗셈 연산에서 몫을 저장합니다' 라는 조건을 어떻게 이행하는가... 문제에 답이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 연산 중간 'System.out.print();'를 끼워 넣어 연산 결과를 확인하는 것, 그리고 손으로 한 연산과 비교해 보는 것&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/101</guid>
      <comments>https://attestorr.tistory.com/101#entry101comment</comments>
      <pubDate>Tue, 16 Apr 2024 12:56:28 +0900</pubDate>
    </item>
    <item>
      <title>자바 문법 1의 자리가 5인 경우</title>
      <link>https://attestorr.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/print-onjeonsu?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.codetree.ai/missions/4/problems/print-onjeonsu?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713102659519&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/4/problems/print-onjeonsu?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/w7mcm/hyVPP11d40/QnHYokGlqjQfckMGDUiw31/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/print-onjeonsu?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/4/problems/print-onjeonsu?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/w7mcm/hyVPP11d40/QnHYokGlqjQfckMGDUiw31/img.png?width=3508&amp;amp;height=3508&amp;amp;face=0_0_3508_3508');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/1의 자리가 5인 경우는 5의 배수이나 10의 배수는 아닌 경우이다.&lt;/p&gt;
&lt;pre id=&quot;code_1713102795168&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();

        for(int i=0; i&amp;lt;=n; i++){
            if((i%2==0)||((i%5==0)&amp;amp;&amp;amp;(i%10!=0))||((i%3==0)&amp;amp;&amp;amp;(i%9!=0))){
                continue;
            }
            System.out.print(i+&quot; &quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/100</guid>
      <comments>https://attestorr.tistory.com/100#entry100comment</comments>
      <pubDate>Sun, 14 Apr 2024 22:53:28 +0900</pubDate>
    </item>
    <item>
      <title>자바 완전수 판별기</title>
      <link>https://attestorr.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712906709224&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&quot; data-og-description=&quot;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&quot; data-og-host=&quot;www.codetree.ai&quot; data-og-source-url=&quot;https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; data-og-url=&quot;https://codetree.ai/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&amp;amp;utm_source=clipboard&amp;amp;utm_medium=text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코드트리 | 코딩테스트 준비를 위한 알고리즘 정석&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.codetree.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;완전수는 자기 자신을 제외한 양의 약수를 더했을 때 자기 자신이 되는 양의 정수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6에서 자기 자신을 제외한 양의 약수를 더하면 1+2+3 으로, 완전수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 모든 양 약수를 더했을 때 자기 자신의 2배가 되는 수를 말하기도 한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712907181535&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int sum=0;
        int n=sc.nextInt();
        for(int i=1; i&amp;lt;n; i++){
            if(n%i==0){
                sum+=i;
            }
        }
        if(sum==n){
            System.out.print(&quot;P&quot;);
        }else{
            System.out.print(&quot;N&quot;);
        }
        
    }
}

//주어진 부터 1씩 감소하여 1까지 나누었을 때
//나머지가 0인 경우 그 수는 주어진 수의 약수이다.
//그러므로 약수의 총합이 주어진 수가 되면 그 수 n은 완전수이다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/99</guid>
      <comments>https://attestorr.tistory.com/99#entry99comment</comments>
      <pubDate>Fri, 12 Apr 2024 16:33:08 +0900</pubDate>
    </item>
    <item>
      <title>자바 추상 클래스와 인터페이스</title>
      <link>https://attestorr.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스는 상속에서 슈퍼 클래스로 사용된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추상 메소드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 메소드란 선언은 되어 있으나 코드가 구현되어 있지 않은, 즉 껍데기만 있는 메소드이다. 추상 메소드를 작성하려면 abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다. 다음은 추상 메소드를 선언한 예이다.&lt;/p&gt;
&lt;pre id=&quot;code_1712661771685&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public abstract String getName();
public abstract void setName(String s);&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추상 클래스(abstract class)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스는 객체를 생성할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상클래스를 단순히 상속받는 서브클래스는 추상 클래스가 된다. 추상 클래스의 추상 메소드를 그대로 상속받기 때문이다. 그러므로 서브 클래스에 abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스는 추상 메소드를 통해 서브 클래스가 구현할 메소드를 명료하게 알려주는 &lt;span style=&quot;color: #006dd7;&quot;&gt;인터페이스&lt;/span&gt;의 역할을 하고, 서브 클래스는 추상 메소드를 목적에 맞게 구현하는 다형성을 실현할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상클래스를 상속받은 서브 클래스는 개발자에 따라 다양하게 구현된다. 추상 클래스를 책의 목차에 비유하면, 서브 클래스는 목차에 따라 작성된 책과 같다. 책을 쓸 때도 목차를 잡아놓고 책을 쓰면 훨씬 쉽고 빠르며 방향이 흐트러지지 않는 것처럼 추상 클래스를 이용하면 응용프로그램의 &lt;span style=&quot;color: #006dd7;&quot;&gt;설계와 구현을 분리&lt;/span&gt;할 수 있다. 추상 클래스로 기본 방향을 잡아놓고 서브 클래스에서 구현하면 구현 작업이 쉬워진다. 또한 추상 클래스는 &lt;span style=&quot;color: #006dd7;&quot;&gt;계층적 상속 관계&lt;/span&gt;를 가지는 클래스들의 구조를 만들 때 적합하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스 구현 연습&lt;/p&gt;
&lt;pre id=&quot;code_1712662658604&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package GoodCalc;

abstract class Calculator{
	public abstract int add(int a, int b); //두 정수의 합을 구하여 리턴
	public abstract int subtract(int a, int b); // 두 정수의 차를 구하여 리턴
	public abstract double average(int[] a); //배열에 저장된 정수의 평균 리턴
}

public class GoodCalc extends Calculator{
	@Override
	public int add(int a,int b) { //추상 메소드 구현
		return a+b;
	}
	@Override
	public int subtract(int a,int b) { //추상 메소드 구현
		return a-b;	
	}
	@Override
	public double average(int[] a) {//추상 메소드 구현
		double sum=0;
		for(int i=0; i&amp;lt;a.length; i++) {
			sum+=a[i];
		}
		return sum/a.length;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GoodCalc c=new GoodCalc();
		System.out.println(c.add(2, 3));
		System.out.println(c.subtract(2, 3));
		System.out.println(c.average(new int[] {2,3,4}));
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인터페이스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스(interface)는 규격을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 인터페이스는 interface 키워드를 사용하여 클래스를 선언하듯이 선언한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712662924712&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface PhoneInterface{//인터페이스 선언
	public static final int TIMEOUT=10000; //상수 필드, public static final 생략 가능
    public abstract void sendCall(); //추상 메소드, public abstract 생략 가능
    public abstract void reveiveCall(); //추상 메소드, public abstract 생략 가능
    public default void printLogo(){ //default 메소드, public 생략 가능
		System.out.println(&quot;**Phone**&quot;);
    };// 디폴트 메소드
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java 10 까지 인터페이스는 상수, 추상메소드(public abstract), default 메소드, private 메소드, static 메소드 총 5가지 종류의 멤버로 구성되며, 필드(멤버변수)를 만들 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스는 객체를 생성할 수 없다. 인터페이스에 구현되지 않은 추상 메소드를 가질 수 있기 때문에 객체를 생성할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스 타입의 레퍼런스 변수는 선언 가능하다. PhoneInterface galaxy;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스는 인터페이스를 상속받을 수 없고, 인터페이스끼리만 상속이 가능하다. 인터페이스의 상속은 &lt;span style=&quot;color: #006dd7;&quot;&gt;extends&lt;/span&gt; 라는 키워드를 이용한다. 자바는 인터페이스의 다중 상속을 허용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 상속 받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현하여야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스 구현이란 &lt;span style=&quot;color: #006dd7;&quot;&gt;implements&lt;/span&gt; 라는 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현한 클래스를 작성하는 것을 말한다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인터페이스와 추상 클래스의 비교&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브 클래스에서 구현할 수밖에 없는 기능만을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스는 필드는 포함하지 않는다. 그리고 다중 상속을 지원한다.&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/98</guid>
      <comments>https://attestorr.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 9 Apr 2024 20:50:29 +0900</pubDate>
    </item>
    <item>
      <title>자바 메소드 오버라이딩</title>
      <link>https://attestorr.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;메소드 오버라이딩은 슈퍼 클래스와 서브 클래스의 메소드 사이에 발생하는 관계로서, 슈퍼 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 갖는 메소드를 서브 클래스에 재작성하는 것이다. 서브 클래스의 개발자는 슈퍼 클래스에 있는 메소드로 목적하는 바를 이룰 수 없을 때 동일한 이름의 메소드를 서브 클래스에 다시 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 오버라이딩은 '슈퍼 클래스 메소드 무시하기 혹은 덮어쓰기' 로 표현할 수 있다. 이는 슈퍼클래스의 메소드를 무시하고 서브 클래스에서 오버라이딩된 메소드가 무조건 실행되도록 한다는 것인데, 이런 처리를 동적 바인딩이라고 부르며, 메소드 오버라이딩은 동적 바인딩을 유발시킨다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;오버라이딩의 목적, 다형성 실현&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오버라이딩은 수퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 예시로 연습해보자.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712660920638&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package MethodOverrdingEx;

class Shape{	//슈퍼 클래스
	public Shape next; 
	public Shape() {next=null;}
	
	public void draw() {
		System.out.println(&quot;Shape&quot;);
	}
}
class Line extends Shape{
	public void draw() {
		System.out.println(&quot;Line&quot;);
	}
}
class Rect extends Shape{
	public void draw() {
		System.out.println(&quot;Rect&quot;);
	}
}
class Circle extends Shape{
	public void draw() {
		System.out.println(&quot;Circle&quot;);
	}
}

public class MethodoverridingEx {
	static void paint(Shape p) {
		p.draw(); // p가 가리키는 객체 내에 오버라이딩된 drawn()호출. 동적 바인딩
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Line line=new Line();
		
		//다음 호출들은 모두 paint()메소드 내에서 Shape에 대한 레퍼런스 p로 업캐스팅됨
		paint(line);
		paint(new Shape());
		paint(new Line());
		paint(new Rect());
		paint(new Circle());
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;메소드 오버라이딩의 제약 사항&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슈퍼 클래스의 메소드와 동일한 원형으로 작성한다.&lt;/li&gt;
&lt;li&gt;슈퍼 클래스 메소드의 접근 지정자보다 접근의 범위를 좁여 오버라이딩 할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;메소드 오버라이딩 활용&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 오버라이딩은 서브 클래스 개발자가 슈퍼 클래스의 특정 메소드를 자신의 특성에 맞게 새로 만들어 사용하고자 하는 경우에 활용된다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;오버라이딩과 super 키워드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;메소드가 오버라이딩되어 있는 경우, 동적 바인딩에 의해 항상 서브 클래스에 오버라이딩한 메소드가 호출됨을 설명하였다. 그러면 슈퍼 클래스의 메소드는 이제 더 이상 쓸모없게 된 것인가? 실행하는 방법은 없는가? 아니다. 다음과 같이 서브클래스에서 super 키워드를 이용하면 정적 바인딩을 통해 슈퍼클래스의 멤버에 접근할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;super.슈퍼클래스의멤버&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1712661323761&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;name=&quot;Circle&quot;; //Circle 클래스의 name에 &quot;Circle&quot; 기록
super.name=&quot;Shape&quot;; // Shape 클래스의 name에 &quot;Shape&quot;기록
super.draw(); // Shape 클래스의 draw() 호출. 정적 바인딩&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/97</guid>
      <comments>https://attestorr.tistory.com/97#entry97comment</comments>
      <pubDate>Tue, 9 Apr 2024 20:20:25 +0900</pubDate>
    </item>
    <item>
      <title>자바 업캐스팅과 instanceof 연산자</title>
      <link>https://attestorr.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;캐스팅이란 타입 변환을 말한다. 자바에서 클래스에 대한 캐스팅은 업캐스팅(upcasting)과 다운캐스팅(downcasting)으로 나뉜다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;자바 상속에서 서브 클래스의 객체는 슈퍼 클래스의 멤버를 모두 가진다. 그러므로 서브 클래스의 객체를 슈퍼 클래스의 객체로 취급할 수 있다. 서브 클래스의 객체에 대한 래퍼런스를 슈퍼 클래스 타입으로 변환하는 것을 업캐스팅이라고 한다. 다음의 예를 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1712659068258&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Person p;
Student s = new Student();
p=s; // 업캐스팅&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드에서, 슈퍼 클래스 타입의 래퍼런스 p가 서브 클래스 객체(s)를 가리키도록 치환되는 것이 업캐스팅이다. 업캐스팅을 통해 Person 타입의 p는 Student 객체를 가리킨다. 그러나 레퍼런스 p로는 Person 클래스의 멤버만 접근할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업캐스팅과 반대로 캐스팅하는 것을 다운캐스팅(downcasting)이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Person p=new Student&lt;/b&gt;(&quot;이재문&quot;);&lt;span style=&quot;color: #006dd7;&quot;&gt; //업캐스팅&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Student s=(Student)p;&lt;/b&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;// 다운캐스팅, (Student)의 타입 변환을 반드시 표시&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;업캐스팅과 instanceof 연산자&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업캐스팅을 한 경우,레퍼런스가 가리키는 객체의 진짜 클래스 타입을 구분하기 어렵다. 아래의 예&lt;/p&gt;
&lt;pre id=&quot;code_1712659589071&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Person p=new Person();
Person p=new Student();
Person p=new Researcher();
Person p=new Professor();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레퍼런스가 가리키는 객체가 어떤 클래스 타입인지 구분하기 위해, 자바에서는 instanceof 연산자를 두고 있다. instanceof 연산자의 결과 값은 boolean 값으로, '레퍼런스'가 가리키는 객체가 해당 '클래스' 타입의 객체이면 true이고 아니면 false로 계산한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712659927181&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Person jee=new Student();
if(jee instanceof PErson) //true&lt;/code&gt;&lt;/pre&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/96</guid>
      <comments>https://attestorr.tistory.com/96#entry96comment</comments>
      <pubDate>Tue, 9 Apr 2024 19:52:27 +0900</pubDate>
    </item>
    <item>
      <title>자바 상속 super( )</title>
      <link>https://attestorr.tistory.com/95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MAnyp/btsGwN50UkA/RRCnxjUlkybZkPzOgmpKsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MAnyp/btsGwN50UkA/RRCnxjUlkybZkPzOgmpKsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MAnyp/btsGwN50UkA/RRCnxjUlkybZkPzOgmpKsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMAnyp%2FbtsGwN50UkA%2FRRCnxjUlkybZkPzOgmpKsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;157&quot; height=&quot;50&quot; data-origin-width=&quot;157&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;서브 클래스의 생성자에서&lt;span style=&quot;color: #006dd7;&quot;&gt; super()&lt;/span&gt; 을 이용하면, 슈퍼 클래스 생성자를 명시적으로 선택할 수 있다. &lt;span style=&quot;color: #006dd7;&quot;&gt;super()&lt;/span&gt;는 슈퍼 클래스 생성자를 호출하는 코드이다. 괄호 안에 인자를 전달하여 슈퍼 클래스의 생성자를 호출할 수도 있다. 아래는 다음의 코드이다.&lt;/p&gt;
&lt;pre id=&quot;code_1712658619017&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package ConstructorEx4;

class A{
	public A() {
		System.out.println(&quot;생성자 A&quot;);
	}
	public A(int x) {
		System.out.println(&quot;매개변수생성자A&quot;+x);
	}
}

class B extends A{
	public B() {
		System.out.println(&quot;생성자 B&quot;);
	}
	public B(int x) {
		super(x); //첫 줄에 와야함
		System.out.println(&quot;매개변수생성자B&quot;+x);
	}
}

public class ConstructorEx4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b;
		b=new B(5);
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/95</guid>
      <comments>https://attestorr.tistory.com/95#entry95comment</comments>
      <pubDate>Tue, 9 Apr 2024 19:35:28 +0900</pubDate>
    </item>
    <item>
      <title>자바 final 상수화</title>
      <link>https://attestorr.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;final 이 클래스 이름 앞에 사용되면 그 클래스는 상속 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fianl로 메소드를 선언하면 오버라이딩 할 수 없는 메소드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;final로 필드를 선언하면 필드는 상수가 된다.&amp;nbsp;&lt;/p&gt;</description>
      <category>자바 문법</category>
      <author>duruej</author>
      <guid isPermaLink="true">https://attestorr.tistory.com/94</guid>
      <comments>https://attestorr.tistory.com/94#entry94comment</comments>
      <pubDate>Tue, 9 Apr 2024 19:01:37 +0900</pubDate>
    </item>
  </channel>
</rss>